由于在 Serializer 中评估 QuerySet,迁移无法运行?
Posted
技术标签:
【中文标题】由于在 Serializer 中评估 QuerySet,迁移无法运行?【英文标题】:Migrations can't run due to evaluation of QuerySet in Serializer? 【发布时间】: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 的关系不存在(因为尚未运行迁移)。
【问题讨论】:
【参考方案1】:您永远不应该在类级别定义中运行实际查询;这通常在 Django 和 DRF 中都是正确的。 get
是一个查询,将在定义时访问数据库,尽管 queryset
参数不会,也可以。
如果您想设置基于实际对象的默认值,您应该在创建时通过定义 create()
方法来完成,您将在该方法中检查是否未提供该值。
【讨论】:
以上是关于由于在 Serializer 中评估 QuerySet,迁移无法运行?的主要内容,如果未能解决你的问题,请参考以下文章
spring data redis serializer SerializationException 序列化问题
javascript Criaçãoderesolvers para os tipos querys
日志log使用序列反序列加密(Serializer) DESCrypto 加密