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)
Вернуться на верх