Django - 使用模型和数据序列化复杂的上下文结构
Posted
技术标签:
【中文标题】Django - 使用模型和数据序列化复杂的上下文结构【英文标题】:Django - serialize complex context structure with models and data 【发布时间】:2021-02-17 02:01:12 【问题描述】:在 django 视图中,我希望能够序列化整个上下文,这通常用于发送到模板(通常通过调用 render
并传递 locals
)。
我想试验 SPA+API 和继续前进的可能性,我想创建函数,将locals
序列化为 json 并将其作为 json 响应返回。
现在的问题是,本地通常是模型的列表、分布和查询集的混合。
我可以使用django.core.serializers
或使用 django-rest-framework 序列化模型。我可以使用 json
库将 dict 与原始类型进行序列化,但我不知道如何将它们混合在一起的任何简单方法。
理想的方法是通过 locals
字典并用它们的序列化表示替换所有找到的模型,然后将它们放在一起,甚至可能在哪个序列化器(在 drf 意义上)用于哪个模型之前指定。但我真的不想重新发明***,以防它已经存在。
另一个问题是 - 尝试这样做是否是个好主意?返回 json 上下文作为服务器端渲染的替代方案?我正处于原型设计阶段,所以我仍在考虑如何向前推进,我们感谢该领域的任何意见。
【问题讨论】:
【参考方案1】:我会推荐使用 DRF
ModelSerializer
将返回一个 Json 编码的模型数组
Serializer
和 DictField
将返回一个 Json 编码的 dict
Serializer
和 ListField
将返回一个 Json 编码的 list
您可以创建 Serializer
字段是另一个 Serializer
用于嵌套目的。
https://www.django-rest-framework.org/api-guide/fields/#composite-fields
https://www.django-rest-framework.org/api-guide/serializers/#dealing-with-nested-objects
对于你的问题,这是个好主意,我想说:
如果您将数据推送到外部源(不是 django),那很好 如果您将数据推送到 django 模板,这是个坏主意,您会失去很多 django 功能:(【讨论】:
我知道这一点,但这需要我为每个视图创建序列化程序,即使我认为没有必要。在我看来,我需要做的就是为模型和其余部分(原始数据类型 + 列表/集合/字典)提供序列化程序。 会起作用,(但您需要提供好的 ModelSerializer)但每个视图都会像掷硬币一样。如果你想用 API 来构建它,你需要更严格,否则你会浪费很多时间来调试以上是关于Django - 使用模型和数据序列化复杂的上下文结构的主要内容,如果未能解决你的问题,请参考以下文章
Django Rest Framework-----序列化详解(serializers)
使用 prefetch_related 和聚合来避免 Django 数据库查询具有时间序列数据的模型的 n+1 问题