Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django无法删除自定义字段类;makemigrations抛出AttributeError_Python_Django_Django Models_Django Migrations - Fatal编程技术网

Python Django无法删除自定义字段类;makemigrations抛出AttributeError

Python Django无法删除自定义字段类;makemigrations抛出AttributeError,python,django,django-models,django-migrations,Python,Django,Django Models,Django Migrations,提前期: 我子类化了django.db.models.fields.CharField。然后在一个模型中使用名为myapp.models.QueryStringField的自定义字段,进行迁移并成功迁移。然后我改变了主意,决定在我的模型中用一个普通的CharField替换它,我做到了(同样是成功迁移) 问题: 然后,当我完全从myapp.models中删除QueryStringField类并执行makemigrations时,它抛出了以下错误(此处显示的最后一行): 文件“C:\…\migrat

提前期:

我子类化了
django.db.models.fields.CharField
。然后在一个模型中使用名为
myapp.models.QueryStringField
的自定义字段,进行迁移并成功迁移。然后我改变了主意,决定在我的模型中用一个普通的
CharField
替换它,我做到了(同样是成功迁移)

问题:

然后,当我完全从
myapp.models
中删除
QueryStringField
类并执行
makemigrations
时,它抛出了以下错误(此处显示的最后一行):

文件“C:\…\migrations\00…py”,第17行,在迁移中
field=myapp.models.QueryStringField(最大长度=255),
AttributeError:模块“myapp.models”没有属性“QueryStringField”

我能做些什么来解决这个问题?我理解这在技术上是正确的,因为迁移引用了一个不存在的类,但肯定可以以某种方式解决这个问题。我对删除迁移文件有点紧张。

不能只删除字段类,该类由迁移文件引用

您应该更改涉及
QueryStringField
的迁移文件。您可以在更改字段的位置检查迁移,并删除迁移的该部分,以便:

from django.db import migrations, models


class Migration(migrations.Migration):

    dependencies = [
        ('someapp', '1234_some_name'),
    ]

    operations = [
        # migrations.AlterField(
        #     model_name='mymodel',
        #     name='myfield',
        #     field=models.QueryStringField(
        #         # ...
        #     ),
        # ),
    ]
从django.db导入迁移、模型
类迁移(migrations.Migration):
依赖项=[
('someapp','1234_someu_name'),
]
操作=[
#AlterField迁移(
#model_name='mymodel',
#name='myfield',
#field=models.QueryStringField(
#         # ...
#     ),
# ),
]
以及在您将其更改回的迁移中:

from django.db import migrations, models


class Migration(migrations.Migration):

    dependencies = [
        ('someapp', '5678_some_other_name'),
    ]

    operations = [
        # migrations.AlterField(
        #     model_name='mymodel',
        #     name='myfield',
        #     field=models.CharField(
        #         # ...
        #     ),
        # ),
    ]
从django.db导入迁移、模型
类迁移(migrations.Migration):
依赖项=[
('someapp','5678_some_other_name'),
]
操作=[
#AlterField迁移(
#model_name='mymodel',
#name='myfield',
#field=models.CharField(
#         # ...
#     ),
# ),
]

删除这些更改(以及因此使用
QueryStringField
的所有更改)后,您可以安全地删除它。

您无法轻松删除该字段,因为它被迁移文件引用。如果您删除迁移文件中更改字段的部分,可能会起作用。谢谢,这就成功了。更重要的是,我现在更了解迁移的工作方式。我想我可以完全删除和编辑一些文件,但这是一个更安全的解决方案。