由于在 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,迁移无法运行?的主要内容,如果未能解决你的问题,请参考以下文章

PHP 调试extbase-SQL-Querys

spring data redis serializer SerializationException 序列化问题

javascript Criaçãoderesolvers para os tipos querys

日志log使用序列反序列加密(Serializer) DESCrypto 加密

在 ActiveModel::Serializer 中序列化错误哈希

如何使用 JSON.serializer 在 Swift 中解析 JSON