迁移期间的 Django 问题 - 懒惰的参考
Posted
技术标签:
【中文标题】迁移期间的 Django 问题 - 懒惰的参考【英文标题】:Django issue during migrations - lazy reference 【发布时间】:2017-07-24 11:29:16 【问题描述】:我目前将此模型添加到我的应用中
from mainApp.models import modelPatient
class modelBodyParts(models.Model):
part_name = models.CharField(max_length=1000, unique=False , default="")
modelPatient = models.ForeignKey(modelPatient)
result = models.CharField(max_length=3000, unique=False , default="")
现在 makemigrations 和 migrate 命令给我以下错误
>>python manage.py makemigrations
>>python ./manage.py migrate
ValueError: The field interviewApp.modelInterviewAnswers.patients was declared with a lazy reference to 'mainApp.modelpatients', but app 'mainApp' doesn't provide model 'modelpatients'
我不确定这意味着什么。但我确实记得在某一时刻mainApp.modelpatients
存在,然后它被更改为mainApp.modelpatient
仍然存在。我该如何解决这个问题,为什么会出现?任何帮助将不胜感激。
【问题讨论】:
问题解决了吗? 【参考方案1】:对我来说,发生了这个错误,因为我正在从
交换一个 ForeignKey 模型my_field = models.ForeignKey('old.model', ...)
到
my_field = models.ForeignKey('new.model', ...)
解决方案是手动编辑生成的迁移,并将来自 new
应用的最新迁移添加为依赖项:
class Migration(migrations.Migration):
dependencies = [
('old', '0016_whatever'),
('new', '0002_latest_migration'), # Add this line
]
【讨论】:
我在尝试撤消跨应用添加的ForeignKey
时遇到了@JamesFranco 的相同错误,您的解决方案有所帮助。 Django 的自动迁移并没有在dependencies
中列出第二个应用程序,所以我不得不手动添加它【参考方案2】:
尝试使用RenameModel
和RenameField
。在这里查看答案:https://***.com/a/26241640/57952
【讨论】:
【参考方案3】:我刚刚在最新的 django 上再次遇到了这个问题。共享模型已重命名(但未移至新应用),问题是它未能选择一个引用它的其他应用。
我不明白为什么只有一个应用有问题,而其他应用却没有。最初的 makemigraitons
很好,所以只需将它添加到它创建的迁移文件中。之后,对makemigrations
的后续调用返回“未检测到更改”,应该是这样。
# Generated by Django 3.2.5
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
# all the following apps were correctly added as dependencies
('supplier', '0001_initial'),
('marketing', '0004_add_some_field'),
('devops', '0002_fix_some_model'),
('sales', '0001_initial'),
('warehouse', '0010_set_trained'),
('products', '0005_change_sku_format'),
('search', '0003_remove_bad_data'),
# Manually add this one, for the app that was missed
('left_out', '0007_change_name'),
]
operations = [
migrations.RenameModel(
old_name='OldModelName',
new_name='NewModelName',
),
]
【讨论】:
【参考方案4】:只需删除以前的迁移文件,一旦对模型进行了新的更改以相互继承,最好删除旧的迁移,然后执行新的“makemigrations”
【讨论】:
好的,让我们试试核选项以上是关于迁移期间的 Django 问题 - 懒惰的参考的主要内容,如果未能解决你的问题,请参考以下文章
在 Django 迁移期间收到“ValueError: Found wrong number of (0) of constraint for ...”