Настройте вывод Django Serializer с помощью to_representation - PullRequest
0 голосов
/ 02 октября 2018

Я хочу добавить статус и поместить вывод сериализатора в DATA:

Моя модель:

class UserDetails(models.Model):
    user = models.OneToOneField(User,on_delete=models.CASCADE)
    user_group_id = models.ForeignKey(UserGroup, on_delete=models.CASCADE)
    admin_photo = models.ImageField(upload_to='user_image',blank=True)

Мой сериализатор:

class UserDetailSerializer(serializers.ModelSerializer):
   user = serializers.StringRelatedField(many=False)
   user_group_id = serializers.StringRelatedField(many=False)
   class Meta:
      model = UserDetails
      fields = [
         'user',
         'user_group_id',
         'admin_photo',
      ]
      depth = 1

  def to_representation(self, instance):
      data = super(UserDetailSerializer, self).to_representation(instance)
      return {
            'STATUS' : 'SUCCESS',
            'DATA' : data 
        }

ответ iполучил вот это:

[
    {
        "DATA": {
            "user": "user1",
            "user_group_id": "Super Admin",
            "admin_photo": "http://www.someurl.com/media/22-black-wallpaper.jpg"
        },
        "STATUS": "SUCCESS"
    },
    {
        "DATA": {
            "user": "user2",
            "user_group_id": "Admin",
            "admin_photo": "http://www.someurl.com/media/fox.jpg"
        },
        "STATUS": "SUCCESS"
    }
]

но я хочу получить ответ, подобный этому, статус - это основной текст, и я хочу поместить результат из мета класса в DATA

{
    "STATUS": "SUCCESS",
    "DATA": [
       {
          "user": "user1",
          "user_group_id": "Super Admin",
          "admin_photo": "http://www.someurl.com/media/22-black- 
                          wallpaper.jpg"
       },
       {
          "user": "user2",
          "user_group_id": "Admin",
          "admin_photo": "http://www.someurl.com/media/fox.jpg"
       }
     ]
 }

отредактированный Просмотр, используя толькоlistapiview и использовать сериализатор класса:

class UserListView(generics.ListAPIView):
    lookup_vield = 'id'
    serializer_class = UserDetailSerializer

    def get_queryset(self):
       return UserDetails.objects.all()

1 Ответ

0 голосов
/ 02 октября 2018

Вы не можете сделать это на уровне сериализатора, но это можно сделать на уровне просмотра, переопределив метод list(...) для UserListView

Шаг 1 .Удалить to_representation метод из UserDetailSerializer сериализатор
Шаг 2 .Переопределение метода list() как

class UserListView(generics.ListAPIView):
    lookup_vield = 'id'
    serializer_class = UserDetailSerializer

    def get_queryset(self):
        return UserDetails.objects.all()

    <b>def list(self, request, *args, **kwargs):
        res = super(UserListView, self).list(request, *args, **kwargs)
        res.data = {"STATUS": "SUCCESS", "DATA": res.data}
        return res</b>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...