Как я понял для того, чтобы можно было из REST запросов работать с БД существует прекрасная модель ModelViewSet и в ней filter_backends и filter_fields, в которой описываются поля по которым можно фильтровать запрос к БД.
Код сделан по примеру из
документации и
документации, но выдает ошибку:
AttributeError 'QuerySet' object has no attribute 'model' при GET-запросе.
Так и не смог определить что не так, пересмотрел кучу примеров и у всех работает так как описано в документации. Была мысль, что возможно проблема в каких-то импортах. Так как работаю с
mongoengine, некоторые импорты заменяются с
rest_framework на
rest_framework_mongoengine. Но видел примеры и с этими импортами, где якобы все работает. В чем же дело?
Сам код:
1) Сериалайзер
from rest_framework_mongoengine.serializers import DocumentSerializer
from processing.models import SomeModel
class MySerializer(DocumentSerializer):
class Meta:
model = SomeModel
fields = "__all__"
2) Представление
from rest_framework_mongoengine.viewsets import ModelViewSet as MongoModelViewSet
from django_filters.rest_framework import DjangoFilterBackend
from api.v4.serializers import MySerializer
from processing.models import SomeModel
class UsersViewSet(MongoModelViewSet):
# queryset = SomeModel.objects.all()
serializer_class = MySerializer
filter_backends = (DjangoFilterBackend,)
filter_fields = ('user', 'user_code') # все как в документации
def get_queryset(self):
return SomeModel.objects.all()
Как я понимаю по такой урле я должен получить отфильтрованный ответ:
example.com/api/products?user=ivasic&user_code=4569