Ответы пользователя по тегу Django Rest Framework
  • Почему DRF serializer игнорирует RawQuerySet?

    0ralo
    @0ralo Автор вопроса
    Python backend developer
    Пока нашел костыль как решить. Переписал вьюху так
    class UserStratsWithNView(APIView):
    
        def get(self, request, pk=None):
            if pk is None:
                users = User.objects.raw("SELECT id, username, password FROM viewapp_user WHERE username LIKE 'N%%'")
                serializer = UserSerializer(users, many=True)
                print(dir(serializer))
            else:
                users = User.objects.raw(
                    "SELECT id, username, password FROM viewapp_user WHERE username LIKE 'N%%' and id=%s", [pk])
                serializer = UserSerializer(users)
                print(dir(serializer))
            return Response(serializer.data)

    Ибо ModelViewSet под капотом сам вызывает методы, которые решают many=

    Но при запросе с параметром все равно
    ошибка
    AttributeError at /va/nusers/9
    Got AttributeError when attempting to get a value for field `username` on serializer `UserSerializer`.
    The serializer field might be named incorrectly and not match any attribute or key on the `RawQuerySet` instance.
    Original exception text was: 'RawQuerySet' object has no attribute 'username'.


    Если передать сериалайзеру many=True, то ошибки не будет, но тогда в респонсе будут "[]", что немного не в кайф. Тогда изменияем аргумент сериалайзера, так
    serializer = UserSerializer(users[0]).
    В итоге чудо - работает, непонятно ничего но работает. Сериализация нескольких объектов не вызывает ошибок.
    Ответ написан
    Комментировать