DRF показывает разные поля в «list» и «get_object» - PullRequest
0 голосов
/ 14 ноября 2018

Я использую такие наборы:

class UserViewSet(viewsets.ModelViewSet):
    """Viewset for model User."""

    queryset = User.objects.all()
    serializer_class = UserSerializer

и мой сериализатор имеет следующие поля:

fields = ('id', 'url', 'username', 'first_name', 'middle_name', 'last_name', 'role',
          'get_role_display', 'is_authenticated', 'is_staff', 'is_superuser', )

Когда я получаю доступ к API для просмотра списка всех пользователей с этим URL /api/user/, он возвращает json_data:

[
{
    "id": 1,
    "url": "http://127.0.0.1:8000/api/user/1/",
    "username": "admin",
    "first_name": "",
    "middle_name": null,
    "last_name": "",
    "role": "A",
    "get_role_display": "Admin",
    "is_authenticated": true,
    "is_staff": true,
    "is_superuser": true
},
{
    "id": 2,
    "url": "http://127.0.0.1:8000/api/user/2/",
    "username": "7004104463",
    "first_name": "Vaibhav",
    "middle_name": "Bold",
    "last_name": "Vishal",
    "role": "S",
    "get_role_display": "Student",
    "is_authenticated": true,
    "is_staff": false,
    "is_superuser": false
}
]

Но я пытаюсь вернуть только несколько полей в списке, скажем, только 'id', 'username', 'url',, но при запросах, когда один объект запрашивается, например, /api/user/1/ Я хочу вернуть все поля. Я хочу избежать использования двух разных представлений rest_framework. Я хочу, чтобы один набор и сериализатор для этого. Есть ли способ сделать это?
Я использую React во внешнем интерфейсе и хочу избежать извлечения ненужных данных.

1 Ответ

0 голосов
/ 14 ноября 2018

Единственный известный мне способ - переписать get_serializer_class -Metod и вернуть другой Serializer на основе текущего запроса.

class UserViewSet(viewsets.ModelViewSet):
    ....
    def get_serializer_class(self, request):
        if self.action == 'retrieve':
            return UserDetailSerializerClass
        return UserListSerializerClass

Существует также пакет pypi

Кредиты: https://stackoverflow.com/a/22755648/7774036 & https://stackoverflow.com/a/30670569/7774036

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...