我有一个像下面这样的模型,其中包括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。