Пока нашел костыль как решить. Переписал вьюху так
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])
.
В итоге чудо - работает, непонятно ничего но работает. Сериализация нескольких объектов не вызывает ошибок.