试图解决鸡与蛋的问题。我定义了一个新模型,现有模型的外键已插入该模型,并进行了新的迁移,其中包括为新模型提供一些默认值的数据迁移。
在现有模型的序列化程序中,我想定义一个默认值,如下所示:
new_thing = serializers.PrimaryKeyRelatedField(
queryset=NewThing.objects.all(),
default=NewThing.objects.get(id=DEFAULT_NEW_THING_ID),
)
我不了解django的特定机制,但这似乎在运行迁移时引起问题(尽管makemigrations看起来不错)。迁移似乎在视图上运行了一系列应用程序检查,并最终在序列化程序上运行,在序列化程序中,它评估NewThing QuerySet并返回一个错误,指出与NewThing的关系不存在(因为尚未运行迁移)。>
答案 0 :(得分:2)
永远不要在类级别的定义中运行实际的查询;在Django和DRF中通常都是这样。 get
是一个查询,将在定义时访问数据库,尽管queryset
自变量不会,也可以。
如果要设置基于实际对象的默认值,则应在创建时通过定义create()
方法来执行此操作,在该方法中,您将检查未提供该值。