我意外地将“1”作为models.DateField()的默认值。现在,Django每次尝试迁移时都会抛出一个错误,即使我使用( CharacterField ())删除了CharacterField/更改了默认值。
有办法解决这个问题吗?
Applying mainApp.0006_test_date...Traceback (most recent call last):
File "/Users/di/Code/Schule/GymnasiumApp/manage.py", line 22, in <module>
main()
File "/Users/di/Code/Schule/GymnasiumApp/manage.py", line 18, in main
execute_from_command_line(sys.argv)
File "/Users/di/Code/Schule/GymnasiumApp/venv/lib/python3.10/site-packages/django/core/management/__init__.py", line 446, in execute_from_command_line
utility.execute()
File "/Users/di/Code/Schule/GymnasiumApp/venv/lib/python3.10/site-packages/django/core/management/__init__.py", line 440, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/Users/di/Code/Schule/GymnasiumApp/venv/lib/python3.10/site-packages/django/core/management/base.py", line 402, in run_from_argv
self.execute(*args, **cmd_options)
File "/Users/di/Code/Schule/GymnasiumApp/venv/lib/python3.10/site-packages/django/core/management/base.py", line 448, in execute
output = self.handle(*args, **options)
File "/Users/di/Code/Schule/GymnasiumApp/venv/lib/python3.10/site-packages/django/core/management/base.py", line 96, in wrapped
res = handle_func(*args, **kwargs)
File "/Users/di/Code/Schule/GymnasiumApp/venv/lib/python3.10/site-packages/django/core/management/commands/migrate.py", line 349, in handle
post_migrate_state = executor.migrate(
File "/Users/di/Code/Schule/GymnasiumApp/venv/lib/python3.10/site-packages/django/db/migrations/executor.py", line 135, in migrate
state = self._migrate_all_forwards(
File "/Users/di/Code/Schule/GymnasiumApp/venv/lib/python3.10/site-packages/django/db/migrations/executor.py", line 167, in _migrate_all_forwards
state = self.apply_migration(
File "/Users/di/Code/Schule/GymnasiumApp/venv/lib/python3.10/site-packages/django/db/migrations/executor.py", line 252, in apply_migration
state = migration.apply(state, schema_editor)
File "/Users/di/Code/Schule/GymnasiumApp/venv/lib/python3.10/site-packages/django/db/migrations/migration.py", line 130, in apply
operation.database_forwards(
File "/Users/di/Code/Schule/GymnasiumApp/venv/lib/python3.10/site-packages/django/db/migrations/operations/fields.py", line 108, in database_forwards
schema_editor.add_field(
File "/Users/di/Code/Schule/GymnasiumApp/venv/lib/python3.10/site-packages/django/db/backends/sqlite3/schema.py", line 394, in add_field
self._remake_table(model, create_field=field)
File "/Users/di/Code/Schule/GymnasiumApp/venv/lib/python3.10/site-packages/django/db/backends/sqlite3/schema.py", line 237, in _remake_table
self.effective_default(create_field),
File "/Users/di/Code/Schule/GymnasiumApp/venv/lib/python3.10/site-packages/django/db/backends/base/schema.py", line 423, in effective_default
return field.get_db_prep_save(self._effective_default(field), self.connection)
File "/Users/di/Code/Schule/GymnasiumApp/venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py", line 925, in get_db_prep_save
return self.get_db_prep_value(value, connection=connection, prepared=False)
File "/Users/di/Code/Schule/GymnasiumApp/venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py", line 1438, in get_db_prep_value
value = self.get_prep_value(value)
File "/Users/di/Code/Schule/GymnasiumApp/venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py", line 1433, in get_prep_value
return self.to_python(value)
File "/Users/di/Code/Schule/GymnasiumApp/venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py", line 1389, in to_python
parsed = parse_date(value)
File "/Users/di/Code/Schule/GymnasiumApp/venv/lib/python3.10/site-packages/django/utils/dateparse.py", line 74, in parse_date
return datetime.date.fromisoformat(value)
TypeError: fromisoformat: argument must be str
发布于 2022-10-20 14:52:45
如果是最后一次迁移,则可以在dirs apps/app/migrations中删除0006_*****.py迁移,并使用命令makemigrations
在更改字段中的默认值后重新创建迁移。
如果不是最后一次,则必须删除0006_***之后的所有next,更改DateField的默认值,并使用makemigrations
命令重新创建迁移。在这种情况下,您可能需要销毁db并重新创建它以防止其他问题。
发布于 2022-10-20 14:54:02
您必须将数据库中的每个“1”更改为正确的值。
您可以尝试像UPDATE SET ='2022-01-01‘之类的东西,比如'1';
您可以使用以下命令(在linux上)打开数据库:
sqlite3 db.sqlite3 UPDATE SET ='2022-01-01‘,类似于'1';
它还可以与cmd一起工作:
sqlite3 .open db.sqlite3更新集='2022-01-01‘,类似于'1';
https://stackoverflow.com/questions/74141749
复制相似问题