【问题标题】:Migrations can't run due to evaluation of QuerySet in Serializer?由于在 Serializer 中评估 QuerySet,迁移无法运行?
【发布时间】:2019-04-28 22:38:51
【问题描述】:

试图解决这个先有鸡还是先有蛋的问题。我定义了一个新模型,将现有模型外键放入其中,并进行了新迁移,包括为新模型提供一些默认值的数据迁移。

在现有模型的序列化程序中,我想像这样定义一个默认值:

new_thing = serializers.PrimaryKeyRelatedField(
    queryset=NewThing.objects.all(),
    default=NewThing.objects.get(id=DEFAULT_NEW_THING_ID),
)

我不了解 django 的具体机制,但这似乎在运行迁移时会导致问题(尽管 makemigrations 似乎很好)。似乎迁移对视图运行了一系列应用程序检查,并最终对序列化程序进行了检查,它在其中评估 NewThing QuerySet 并返回一个错误,即 NewThing 的关系不存在(因为尚未运行迁移)。

【问题讨论】:

    标签: django django-migrations


    【解决方案1】:

    您永远不应该在类级别定义中运行实际查询;这通常在 Django 和 DRF 中都是正确的。 get 是一个查询,将在定义时访问数据库,尽管 queryset 参数不会,也可以。

    如果您想设置基于实际对象的默认值,您应该在创建时通过定义 create() 方法来完成,您将在该方法中检查是否未提供该值。

    【讨论】:

      猜你喜欢
      • 2011-11-02
      • 2023-04-05
      • 2016-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-25
      • 2017-10-03
      相关资源
      最近更新 更多