【发布时间】:2020-02-03 14:28:47
【问题描述】:
创建测试数据库,Django 引发此异常
django.core.exceptions.FieldError: Cannot resolve keyword 'xxx' into field. Choices are: ...
失败的迁移是自定义迁移,将数据从(比如说)ModelA 移动到 ModelB:
def forwards(apps, schema_editor):
...
prev_list = ModelA.objects.all().values_list('xxx').distinct()
for item in prev_list:
ModelB(xxx=item).save()
我的下一个动作已检查ModelA,可以预期,它没有名为XXX 的字段
class ModelA(Model):
# no field named xxx
稍微挖掘一下这里发生了什么:
-
ModelA曾经有一个名为xxx的字段 - 有一个迁移尝试创建从
ModelA.xxx读取的ModelB行 -
ModelA没有这样的字段,因为稍后迁移会删除该字段,所以我的模型中没有声明该字段。
为什么创建测试数据库失败(来自python manage.py test)?
我怎样才能解决这个问题?
【问题讨论】:
-
如何在迁移文件中获得
ModalA和ModelB类?您应该从apps参数中获取它们,而不是从源文件中导入它们 -
当 Django 开始创建测试数据库时,它会自省模型并检测到在迁移尝试使用该字段时现在没有
xxx字段 - 我可能猜到这是导致错误的原因。跨度> -
@ivissani 就是这样!我想我可以编辑错误的迁移文件并使用
apps.get_model()- 它照常导入模型而不是使用历史版本
标签: python django django-migrations