在您的迁移中,您应该访问历史模型,而不是像通常那样导入实际模型。
这样做是为了避免您遇到的问题。要获取历史 mdoels(即创建此类迁移时存在的模型),您必须替换您的代码:
从官方 django 文档中检查这一点(此案例用于数据迁移,尽管该概念适用于您的案例):
# -*- coding: utf-8 -*-
from django.db import models, migrations
def combine_names(apps, schema_editor):
# We can't import the Person model directly as it may be a newer
# version than this migration expects. We use the historical version.
Person = apps.get_model("yourappname", "Person")
for person in Person.objects.all():
person.name = "%s %s" % (person.first_name, person.last_name)
person.save()
class Migration(migrations.Migration):
dependencies = [
('yourappname', '0001_initial'),
]
operations = [
migrations.RunPython(combine_names),
]
此迁移执行 python 代码,并且需要一定的模型。为了避免导入不再存在的模型,它不是直接导入,而是在“那个确切的时间片”中对模型的“聚合”访问。这段代码:
apps.get_model("yourappname", "Person")
将完全替代:
from yourappname.models import Person
因为后者将在必须运行迁移的全新安装中失败。
编辑请发布您的迁移的完整代码,看看我是否可以帮助您处理您的特定情况,因为我有一个项目的模型不再存在(即已删除)但没有此类问题。