Django REST Framework: Как передать сериализатору предварительно установленный кверисет, когда представление должно использовать предоставленный библиотекой кверисет
Я хотел бы использовать drf-haystack
для использования набора запросов с предварительной выборкой сериализатором, как показано ниже.
Мне нужно использовать специфичный для haystack кверисет (annotate и prefetch_related недоступны) для этого представления, и
Я не могу передать предварительно выбранный набор в SerializerMethodField
.
Я потратил довольно много времени на этот вопрос. Есть ли лучший способ сделать это?
# views.py
class PostSearchView(ListModelMixin, HaystackGenericAPIView):
index_models = [Post]
serializer_class = PostSearchSerializer
def filter_queryset(self, *args, **kwargs):
#This queryset is haystack's own queryset, so it cannot be annotate or prefetch_related.
queryset = super(PostSearchView, self).filter_queryset(self.get_queryset())
return queryset.filter(published_at__lte=timezone.now())
def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs)
# serializers.py
class PostSearchSerializer(BaseHaystackSerializer):
is_views = serializers.SerializerMethodField()
class Meta:
index_classes = [PostIndex]
search_fields = ("text",)
fields = ("is_views",)
def get_is_views(self, obj):
try:
History.objects.get(post_id=obj.pk)
return True
except History.DoesNotExist:
return False
return obj.is_views # I wanted to do it this way.