由于对Serializer中的QuerySet进行了评估,因此迁移无法运行?

时间:2018-11-27 08:24:21

标签: django django-migrations

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

在现有模型的序列化程序中,我想定义一个默认值,如下所示:

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

我不了解django的特定机制,但这似乎在运行迁移时引起问题(尽管makemigrations看起来不错)。迁移似乎在视图上运行了一系列应用程序检查,并最终在序列化程序上运行,在序列化程序中,它评估NewThing QuerySet并返回一个错误,指出与NewThing的关系不存在(因为尚未运行迁移)。

1 个答案:

答案 0 :(得分:2)

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

如果要设置基于实际对象的默认值,则应在创建时通过定义create()方法来执行此操作,在该方法中,您将检查未提供该值。