【问题标题】:How can I change the migration order for an app to run after the other apps?如何更改应用程序的迁移顺序以在其他应用程序之后运行?
【发布时间】:2017-05-31 15:30:25
【问题描述】:

我正在使用 ModelSerealizer 生成我的项目的“api”,并且我有一个 casa = CasaLegislativa.objects.first () 属性,如下面的代码所述:

Class SessaoPlenariaSerializer (serializers.ModelSerializer):

    # ...

    casa = CasaLegislativa.objects.first ()

    # ...

当我运行python manage.py migrate 时,出现以下错误:

Django.db.utils.ProgrammingError: relation "base_casalegislativa" does not exist

出现此错误是因为在为数据库中的 CasaLegislativa 类创建表之前调用了 SessionPlenariaSerializer 类的 CasaLegislativa.objects.first () 方法。

应用程序“api”没有模型也没有迁移(我不能使用对其他迁移的依赖),但首先检查它,因为它按字母顺序排在第一位。如何更改迁移顺序,以便此应用“api”在其他应用之后运行?

【问题讨论】:

  • 我认为它不会帮助您解决问题,但您可以通过调用应用名称来指定要迁移的内容。所以 ./manage.py 迁移 YourAppName。
  • 这与迁移顺序无关,所有应用程序都在尝试迁移之前加载。此时您无法执行查询。您需要将查询移动到一个方法中或将其替换为一个惰性求值的方法。
  • @kbnk 我这样解决了。但似乎是一个丑陋的黑客。
  • @hansTheFranz,这可能有效(尽管我的尝试失败了),但我需要这个自动化任务由作业运行(例如,在 travis、docker 中)

标签: python django django-migrations django-serializer


【解决方案1】:

我找到的解决方案是获取casa 属性并将CasaLegislativa.objects.first() 调用传递给get_casa 方法。所以对表的引用只会在运行时完成,解决了迁移问题。 不是很好的解决方案,但解决了问题。

【讨论】:

    猜你喜欢
    • 2012-05-03
    • 2015-06-30
    • 1970-01-01
    • 2015-08-30
    • 2011-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多