杰森菲尔德在DRF



我有一个像下面这样的模型,其中包括JsonField

class Animal(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_field=15)
data = models.JSONField()

数据字段结构如下所示:

[
{
"age":"15",
"color":white,
...
},
{
...
...
}
]

我的目标是在DRF中展示这个模型,如下所示:

[
{
"id": 1,
"name": "Bell",
"data": [
{
"age":"15",
"color":"white",
...
},
{
...,
...
}
]
}
]

但是当我在我的模型中使用 JsonFeild 时,我的数据生成了 liKe:

[
{
"id": 1,
"name": "Bell",
"data": "[{"age":"15","color":"white",...},{...,|... }]"
}
]

它被转换为字符串,并在字符中具有 \。

我的序列化程序:

class AnimalSerializer(serializers.ModelSerializer):
class Meta:
model = Animal
fields = "__all__"

要明确告诉 DRF 如何处理data字段,您可以为其分配ListField序列化程序(因为我可以看到它的第一级是一个列表),如下所示:

from rest_framework import serializers
class AnimalSerializer(serializers.ModelSerializer):
data = serializer.ListField()
class Meta:
model = Animal
fields = "__all__"

(可选)可以将child参数传递到同样是序列化程序的ListField中,但对于列表项,它们也将得到验证。

或者你可以使用JSONField,如果它适合你。

文档: https://www.django-rest-framework.org/api-guide/fields/#listfield https://www.django-rest-framework.org/api-guide/fields/#jsonfield

我发现了我的问题:

我用json.dumps()将我的数据转换为 json,并将 json 数据分配给 JsonField,"[{".."}]"的原因是,我只需要将我的字典分配给 JsonField。

最新更新