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