JsonField в DRF
У меня есть модель, как показано ниже, которая включает JsonField:
class Animal(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_field=15)
data = models.JSONField()
структура поля data выглядит следующим образом:
[
{
"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 с помощью json.dumps()
и присвоил данные json полю JsonField, причина "[{\"..\"}]"
в том, что мне просто нужно присвоить мой словарь полю JsonField.