Django rest framework возвращает неверный формат ответа
У меня проблемы с сериализацией списка. поэтому мой models.py выглядит следующим образом:
class Show(models.Model):
name = models.CharField(max_length = 500)
rating = models.FloatField()
network = models.CharField(max_length = 500)
description = models.CharField(max_length = 500)
episodes = models.IntegerField()
cast = models.CharField(max_length=200)
rating = models.FloatField()
def __str__(self):return self.name
и мой serializers.py выглядит следующим образом:
class show_serializer(serializers.ModelSerializer):
id = serializers.IntegerField(read_only = True)
name = serializers.CharField()
network = serializers.CharField()
description = serializers.CharField()
episodes = serializers.IntegerField()
cast = serializers.ListField(child=serializers.CharField(max_length=100))
rating = serializers.FloatField()
def create(self, data):
return Show.object.create(****data)
однако мой json-ответ отформатирован неправильно, я пытаюсь сделать его
{
"id": 3,
"name": "Breaking Bad",
"description": "A high school chemistry teacher diagnosed with inoperable lung cancer turns to manufacturing and selling methamphetamine in order to secure his family's future.",
"network": "AMC",
"episodes": 62,
"cast": [
"Bryan Cranston",
"Aaron Paul",
"Anna Gunn",
"Dean Norris"
],
"rating": 9.5
}
Происходит то, что часть "cast" в json разбивает cast на несколько символов. например, он становится
"cast": [
"[",
"'",
"B",
"r",
and so on for every character
]
Я пробовал переходить на JSONField, использовать ListField для приведения в файле serializer.py, использовать Textfield() для приведения в моделях. Использую SQLite для базы данных
Попробуйте изменить серийники на следующие:
class show_serializer(serializers.ModelSerializer):
class Meta:
model = Show
fileds = '__all__'
а также добавить ListField в модели, а не в класс сериализаторов
SQLite имеет ограниченные функциональные возможности, поэтому он не поддерживает ArrayField или JSONField.
Самый простой способ - использовать SerializerMethodField. Но похоже, что вы храните массив python непосредственно в вашей базе данных, что является ['Br...sth', 'el2']
.
Поэтому вам нужно немного изменить его для лучшего хранения:
obj.cast = ','.join(cast_array)
Таким образом, он станет Br...sth,el2
в вашей базе данных, затем вы сможете разобрать его до списка.
Btw вам не нужно определять все поля в вашем серийнике, ModelSerializer сделает это за вас автоматически.
import json
class show_serializer(serializers.ModelSerializer):
cast = serializers.SerializerMethodField()
def get_cast(self, obj):
return obj.cast.split(',')
def create(self, data):
return Show.object.create(****data)