【问题标题】:Specify app dependency in migration在迁移中指定应用依赖项
【发布时间】:2014-10-31 10:36:59
【问题描述】:

我正在尝试在 Django 1.7 中添加初始数据,并且我读到建议使用数据迁移。

我已正确创建了名为“0001_groups”的迁移文件,我在其中创建了几个contrib.auth 的组和权限。

问题在于它是在运行 auth 迁移之前运行的。

我去查了last migration of the auth app的名字,它叫0005_alter_user_last_login_null.py。所以我尝试了:

dependencies = [
    ('auth', '0005_alter_user_last_login_null'),
]

但我明白了:

KeyError: u"Migration appname.0001_groups 依赖引用 不存在的父节点 ('auth', '0005_alter_user_last_login_null')"

我用谷歌搜索了那个错误,它总是链接到 11 个月前已修复的 Django 错误。

如何正确指定 auth 应用依赖项?

【问题讨论】:

  • 在指定依赖项时您是否尝试过django.contrib.auth 而不是auth

标签: python django django-migrations


【解决方案1】:

我发现您可以使用 __latest__ 引用上次迁移:

dependencies = [
    ('auth', '__latest__'),
]

【讨论】:

  • 不过,一般来说,您不不想参考最新的迁移。如果您有一个 ForeignKey 到后来被删除的模型怎么办?您的迁移将中断。像django.contrib.auth 这样的稳定​​包不太可能有关系,但它仍然是不好的做法,不会为您带来任何好处。
  • 一点也不,迁移不是这样工作的。请注意,makemigrations 产生对 specific 迁移的依赖,而不是 __latest__,并且 Django 源代码本身在其依赖项中引用了特定迁移(例如 here)。有关使用__latest__ 的问题的更多信息,请参阅here
  • 我建议您发布一个新问题以及您的代码,解释您遇到的问题。这里不够继续。关于自定义Managers 的要点在documentation 中进行了解释。为了使迁移工作,Django 必须有一个版本化的,textual 模型表示,并且因为“不可能序列化任意 Python 代码”,该表示不能包含自定义方法或 Managers。跨度>
【解决方案2】:

您正在使用1.7,但查看的是master 源代码树。请参阅this 并尝试0001_initial

【讨论】:

  • 是的,我注意到了。我最终使用了__latest__。谢谢。
  • 如果0001_initial 确实是你想要的,你可以使用__first__
猜你喜欢
  • 2020-05-10
  • 2018-10-06
  • 2020-06-22
  • 2019-04-16
  • 2016-12-24
  • 2018-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多