首页 > 解决方案 > 使用 .values() 序列化模型,但也包括 ManyToMany 相关字段

问题描述

class Book(models.Model):
    user = models.ForeignKey(Profile, on_delete=models.CASCADE)
    tags = models.ManyToManyField(Tag, related_name="books")

我有预先存在的 JavaScript 代码,这些代码适用于我从 django 提供的输入,如下所示:

json.dumps(list(Book.objects.all().values()), cls=DjangoJSONEncoder)

list(Book.objects.all().values())给了我一个字典数组,我的整个前端代码都基于这些字典。

[{ "user": 1 }, { ... }, ... ]

但是,现在我添加了 tags 属性。我期待在我的字典中找到该tags属性,但没有:显然,Django 默认情况下不会序列化 ManyToMany 管理器。

提供的解决方案是这样的:

from django.core import serializers
serializers.serialize("json", Book.objects.all())

但是,它会输出一个完全不同形式的字典,其中我的所有模型属性都在一个fields参数内。

[{"model": "Main.book", "pk": 1, "fields": { "user": ... }]

在维护表单的同时,我怎样才能拥有tags像 with 这样的字段?我是否必须完全重写我的前端代码才能使用格式或是否有更简单的解决方案?serializers.serialize.values()serializers.serialize

标签: jsondjangodjango-orm

解决方案


推荐阅读