python3 manage.py 即使从模型中删除字段,迁移也会给出有关字段的错误 class
python3 manage.py migrate gives error about field even when it is deleted from the model class
每次我 运行 python3 manage.py migrate
我都会得到关于模型 class 中的一个字段的相同错误。即使删除该字段,也会出现同样的错误。
这是模型 class 的样子:
class Events(models.Model):
name = models.CharField(max_length=200, null=True)
date = models.DateTimeField(editable=True, null=True)
sport = models.CharField(max_length=200, null=True)
location = models.CharField(max_length=200, null=True)
description = models.CharField(max_length=200, null=True, blank=True)
date_created = models.DateTimeField(auto_now_add=True)
tags = models.ManyToManyField(Tag)
num_seats = models.IntegerField(null=True, blank=True)
creator = models.CharField(max_length=200, null=False)
这是错误的样子:
TypeError: int() argument must be a string, a bytes-like object or a real number, not 'IntegerField'
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/Users/laithtahboub/Desktop/Programming/Django/events_project/manage.py", line 22, in <module>
main()
File "/Users/laithtahboub/Desktop/Programming/Django/events_project/manage.py", line 18, in main
execute_from_command_line(sys.argv)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/core/management/__init__.py", line 425, in execute_from_command_line
utility.execute()
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/core/management/__init__.py", line 419, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/core/management/base.py", line 373, in run_from_argv
self.execute(*args, **cmd_options)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/core/management/base.py", line 417, in execute
output = self.handle(*args, **options)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/core/management/base.py", line 90, in wrapped
res = handle_func(*args, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/core/management/commands/migrate.py", line 253, in handle
post_migrate_state = executor.migrate(
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/db/migrations/executor.py", line 126, in migrate
state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_initial=fake_initial)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/db/migrations/executor.py", line 156, in _migrate_all_forwards
state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/db/migrations/executor.py", line 236, in apply_migration
state = migration.apply(state, schema_editor)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/db/migrations/migration.py", line 125, in apply
operation.database_forwards(self.app_label, schema_editor, old_state, project_state)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/db/migrations/operations/fields.py", line 225, in database_forwards
schema_editor.alter_field(from_model, from_field, to_field)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/db/backends/sqlite3/schema.py", line 140, in alter_field
super().alter_field(model, old_field, new_field, strict=strict)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/db/backends/base/schema.py", line 618, in alter_field
self._alter_field(model, old_field, new_field, old_type, new_type,
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/db/backends/sqlite3/schema.py", line 362, in _alter_field
self._remake_table(model, alter_field=(old_field, new_field))
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/db/backends/sqlite3/schema.py", line 202, in _remake_table
'default': self.quote_value(self.effective_default(new_field))
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/db/backends/base/schema.py", line 334, in effective_default
return field.get_db_prep_save(self._effective_default(field), self.connection)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/db/models/fields/__init__.py", line 839, in get_db_prep_save
return self.get_db_prep_value(value, connection=connection, prepared=False)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/db/models/fields/__init__.py", line 834, in get_db_prep_value
value = self.get_prep_value(value)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/db/models/fields/__init__.py", line 1824, in get_prep_value
raise e.__class__(
TypeError: Field 'num_seats' expected a number but got <django.db.models.fields.IntegerField>.
如果您需要查看其他文件以确定问题,请告诉我。我知道 Stack Overflow 上有很多与此类似的问题,但请记住,我已经根据这些问题的答案尝试了几乎所有可能的方法,但还没有任何效果。
从模型class中删除字段后,需要在运行python manage.py migrate
之前运行python manage.py makemigrations
因此,通过删除迁移文件夹中除 __init__.py
文件之外的所有文件来解决问题。
并从 django_migrations
table 中删除所有行
re-applying python manage.py migrate --fake
的假迁移
这解决了问题。 (OP 和我打电话来解决问题)
每次我 运行 python3 manage.py migrate
我都会得到关于模型 class 中的一个字段的相同错误。即使删除该字段,也会出现同样的错误。
这是模型 class 的样子:
class Events(models.Model):
name = models.CharField(max_length=200, null=True)
date = models.DateTimeField(editable=True, null=True)
sport = models.CharField(max_length=200, null=True)
location = models.CharField(max_length=200, null=True)
description = models.CharField(max_length=200, null=True, blank=True)
date_created = models.DateTimeField(auto_now_add=True)
tags = models.ManyToManyField(Tag)
num_seats = models.IntegerField(null=True, blank=True)
creator = models.CharField(max_length=200, null=False)
这是错误的样子:
TypeError: int() argument must be a string, a bytes-like object or a real number, not 'IntegerField'
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/Users/laithtahboub/Desktop/Programming/Django/events_project/manage.py", line 22, in <module>
main()
File "/Users/laithtahboub/Desktop/Programming/Django/events_project/manage.py", line 18, in main
execute_from_command_line(sys.argv)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/core/management/__init__.py", line 425, in execute_from_command_line
utility.execute()
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/core/management/__init__.py", line 419, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/core/management/base.py", line 373, in run_from_argv
self.execute(*args, **cmd_options)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/core/management/base.py", line 417, in execute
output = self.handle(*args, **options)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/core/management/base.py", line 90, in wrapped
res = handle_func(*args, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/core/management/commands/migrate.py", line 253, in handle
post_migrate_state = executor.migrate(
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/db/migrations/executor.py", line 126, in migrate
state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_initial=fake_initial)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/db/migrations/executor.py", line 156, in _migrate_all_forwards
state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/db/migrations/executor.py", line 236, in apply_migration
state = migration.apply(state, schema_editor)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/db/migrations/migration.py", line 125, in apply
operation.database_forwards(self.app_label, schema_editor, old_state, project_state)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/db/migrations/operations/fields.py", line 225, in database_forwards
schema_editor.alter_field(from_model, from_field, to_field)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/db/backends/sqlite3/schema.py", line 140, in alter_field
super().alter_field(model, old_field, new_field, strict=strict)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/db/backends/base/schema.py", line 618, in alter_field
self._alter_field(model, old_field, new_field, old_type, new_type,
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/db/backends/sqlite3/schema.py", line 362, in _alter_field
self._remake_table(model, alter_field=(old_field, new_field))
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/db/backends/sqlite3/schema.py", line 202, in _remake_table
'default': self.quote_value(self.effective_default(new_field))
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/db/backends/base/schema.py", line 334, in effective_default
return field.get_db_prep_save(self._effective_default(field), self.connection)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/db/models/fields/__init__.py", line 839, in get_db_prep_save
return self.get_db_prep_value(value, connection=connection, prepared=False)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/db/models/fields/__init__.py", line 834, in get_db_prep_value
value = self.get_prep_value(value)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/db/models/fields/__init__.py", line 1824, in get_prep_value
raise e.__class__(
TypeError: Field 'num_seats' expected a number but got <django.db.models.fields.IntegerField>.
如果您需要查看其他文件以确定问题,请告诉我。我知道 Stack Overflow 上有很多与此类似的问题,但请记住,我已经根据这些问题的答案尝试了几乎所有可能的方法,但还没有任何效果。
从模型class中删除字段后,需要在运行python manage.py migrate
python manage.py makemigrations
因此,通过删除迁移文件夹中除 __init__.py
文件之外的所有文件来解决问题。
并从 django_migrations
table 中删除所有行
re-applying python manage.py migrate --fake
这解决了问题。 (OP 和我打电话来解决问题)