Django: объединение двух сериализаторов в один JSON ответ - PullRequest
0 голосов
/ 24 марта 2020

Я пытаюсь экспортировать данные из двух моделей для пользователя в формате

"Level":[
      {
         "level":1,
         "book_ID":"96F7EBBD-4523-4473-978B-1BFD2F62926A",
         "date_added":"2020-03-06 21:58:42 +0900"
      },
      {
         "level":1,
         "book_ID":"76E8F992-7A7F-477D-B178-67BA5295DA6E",
         "date_added":"2020-03-06 21:59:12 +0900"
      },
]

"Key":[
      {
         "key":1,
         "book_ID":"96F7EBBD-4523-4473-978B-1BFD2F62926A",
         "date_added":"2020-03-06 21:58:42 +0900"
      },
      {
         "level":1,
         "book_ID":"76E8F992-7A7F-477D-B178-67BA5295DA6E",
         "date_added":"2020-03-06 21:59:12 +0900"
      },
]

. Для этого мой код:

serializer.py

class LevelSerializer(serializers.ModelSerializer):

    book_ID = serializers.SlugRelatedField(
        source='book',
        many=False,
        read_only=True,
        slug_field='book_ID'
     )

    class Meta:
        model = Level
        fields = ["date_added",
                  'book_ID',
                  "level",
                  ]

class KeySerializer(serializers.ModelSerializer):

    book_ID = serializers.SlugRelatedField(
        source='book',
        many=False,
        read_only=True,
        slug_field='book_ID'
     )

    class Meta:
        model = Key
        fields = ["date_added",
                  'book_ID',
                  "mykey",
                  ]

view.py

def api_get_all(request):
    if request.method == 'GET':
        all_levels = Level.objects.filter(user=1)
        all_key  = Key.objects.filter(user=1)

        level_serializer = LevelSerializer(all_levels, many=True)
        key_serializer = KeySerializer(all_key, many=True)
        combine_serializer = level_serializer.data + key_serializer.data

        return Response(combine_serializer)

Однако, если я выполню вышеописанную реализацию, я получу

[
      {
         "level":1,
         "book_ID":"96F7EBBD-4523-4473-978B-1BFD2F62926A",
         "date_added":"2020-03-06 21:58:42 +0900"
      },
      {
         "level":1,
         "book_ID":"76E8F992-7A7F-477D-B178-67BA5295DA6E",
         "date_added":"2020-03-06 21:59:12 +0900"
      },
      {
         "level":1,
         "book_ID":"76E8F992-7A7F-477D-B178-67BA5295DA6E",
         "date_added":"2020-03-06 21:59:12 +0900"
      },
      {
         "key":1,
         "book_ID":"96F7EBBD-4523-4473-978B-1BFD2F62926A",
         "date_added":"2020-03-06 21:58:42 +0900"
      }
]

Как сделать так, чтобы она была сериализована в родительском ключе? Любая помощь приветствуется

1 Ответ

2 голосов
/ 24 марта 2020
def api_get_all(request):
    ...

    level_serializer = LevelSerializer(all_levels, many=True)
    key_serializer = KeySerializer(all_key, many=True)

    return Response({
        "Level": level_serializer.data,
        "Key": key_serializer.data
    })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...