【问题标题】:Django issue during migrations - lazy reference迁移期间的 Django 问题 - 懒惰的参考
【发布时间】: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 仍然存在。我该如何解决这个问题,为什么会出现?任何帮助将不胜感激。

【问题讨论】:

  • 问题解决了吗?

标签: django django-models


【解决方案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】:

尝试使用RenameModelRenameField。在这里查看答案:https://stackoverflow.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”

      【讨论】:

      • 好的,让我们试试核选项
      猜你喜欢
      • 2017-03-05
      • 1970-01-01
      • 2018-03-31
      • 2018-04-14
      • 1970-01-01
      • 2015-09-25
      • 2010-11-25
      • 2016-10-07
      • 1970-01-01
      相关资源
      最近更新 更多