Как изменить формат вложенной полезной нагрузки? - PullRequest
0 голосов
/ 28 марта 2019

Я хочу изменить свою полезную нагрузку json с:

{
    "grade": "ten",
    "studentdlList": [
        {
            "studentdetail": {
                "name": "mw",
                "rollno": 19
            }
        },
        {
            "studentdetail": {
                "name": "battery",
                "rollno": 44
            }
        }
    ]
}

На приведенную ниже форму, поскольку первая становится слишком сложной и избыточной:

{
    "grade": "ten",
    "studentdlList": [
            "studentdetail": {
                "name": "mw",
                "rollno": 19
            }
        ,
            "studentdetail": {
                "name": "battery",
                "rollno": 44
            }

    ]
}

Для достижения результата мойСериализаторы приведены ниже:

class SerializerTemp(serializers.Serializer):
    name =  serializers.CharField()
    rollno =  serializers.IntegerField()

class Studentserializer(serializers.ModelSerializer):
    studentdetail = SerializerTemp(source="*")

    class Meta:
        model = Student
        fields = ('studentdetail',)

class SiteSerializer(serializers.ModelSerializer):
    studentdlList = Studentserializer(many = True)

    class Meta:
        model = Grade
        fields = ("grade", "studentdlList")

Последний сериализатор также имеет обновление и создание (что я не поместил здесь).Как я могу изменить свою полезную нагрузку на указанную форму, чтобы она была менее избыточной и более понятной?

1 Ответ

1 голос
/ 28 марта 2019

Как сказано в комментариях, приведенный пример не является допустимым JSON. То, что вы получили здесь, это список объектов, и поэтому в квадратных скобках необходимо явно указать, что это объект:

{
    "grade": "ten",
    "studentdlList": [
        {
            "studentdetail": {
                "name": "mw",
                "rollno": 19
            }
        },
        {
            "studentdetail": {
                "name": "battery",
                "rollno": 44
            }
        }
    ]
}

Вы можете изменить свой код на:

class Studentserializer(serializers.ModelSerializer):  
    class Meta:
        model = Student
        fields = ('name', 'rollno',)

class SiteSerializer(serializers.ModelSerializer):
    studentdlList = Studentserializer(many = True)

    class Meta:
        model = Grade
        fields = ("grade", "studentdlList")

Чтобы произвести что-то вроде:

{
    "grade": "ten",
    "studentdlList": [
        {
            "name": "mw",
            "rollno": 19
        },
        {
            "name": "battery",
            "rollno": 44
        }
    ]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...