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 的所有更改)后,您可以安全地删除它。