Django 无法删除自定义字段 class; makemigrations 抛出 AttributeError
Django cannot delete custom field class; makemigrations throws AttributeError
引导:
我订阅了classdjango.db.models.fields.CharField
。然后在模型中使用名为 myapp.models.QueryStringField
的自定义字段并进行迁移并成功迁移。然后我改变了主意,决定在我的模型中用正常的 CharField
替换它,我也这样做了(再次成功迁移)。
问题:
然后当我从 myapp.models
中完全删除 QueryStringField
class 并执行 makemigrations
时,它抛出了以下错误(此处显示的最后几行):
File "C:\...\migrations[=11=]....py", line 17, in Migration
field=myapp.models.QueryStringField(max_length=255),
AttributeError: module 'myapp.models' has no attribute 'QueryStringField'
我该怎么做才能解决这个问题?我知道这在技术上是正确的,因为迁移引用了不存在的 class,但这肯定可以以某种方式解决。我对删除迁移文件有点紧张。
您不能只删除字段 class,class 被迁移文件引用。
您应该更改涉及QueryStringField
的迁移文件。您可以检查更改字段的迁移,并删除迁移的那部分,因此:
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('someapp', '1234_some_name'),
]
operations = [
<s> # migrations.AlterField(
# model_name='mymodel',
# name='myfield',
# field=models.QueryStringField(
# # ...
# ),
# ),</s>
]
以及在您将其改回的迁移中:
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('someapp', '5678_some_other_name'),
]
operations = [
<s> # migrations.AlterField(
# model_name='mymodel',
# name='myfield',
# field=models.CharField(
# # ...
# ),
# ),</s>
]
删除这些更改(以及因此适用于 QueryStringField
的所有更改)后,您可以安全地删除它。
引导:
我订阅了classdjango.db.models.fields.CharField
。然后在模型中使用名为 myapp.models.QueryStringField
的自定义字段并进行迁移并成功迁移。然后我改变了主意,决定在我的模型中用正常的 CharField
替换它,我也这样做了(再次成功迁移)。
问题:
然后当我从 myapp.models
中完全删除 QueryStringField
class 并执行 makemigrations
时,它抛出了以下错误(此处显示的最后几行):
File "C:\...\migrations[=11=]....py", line 17, in Migration
field=myapp.models.QueryStringField(max_length=255),
AttributeError: module 'myapp.models' has no attribute 'QueryStringField'
我该怎么做才能解决这个问题?我知道这在技术上是正确的,因为迁移引用了不存在的 class,但这肯定可以以某种方式解决。我对删除迁移文件有点紧张。
您不能只删除字段 class,class 被迁移文件引用。
您应该更改涉及QueryStringField
的迁移文件。您可以检查更改字段的迁移,并删除迁移的那部分,因此:
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('someapp', '1234_some_name'),
]
operations = [
<s> # migrations.AlterField(
# model_name='mymodel',
# name='myfield',
# field=models.QueryStringField(
# # ...
# ),
# ),</s>
]
以及在您将其改回的迁移中:
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('someapp', '5678_some_other_name'),
]
operations = [
<s> # migrations.AlterField(
# model_name='mymodel',
# name='myfield',
# field=models.CharField(
# # ...
# ),
# ),</s>
]
删除这些更改(以及因此适用于 QueryStringField
的所有更改)后,您可以安全地删除它。