фильтр django на аннотированном поле - PullRequest
0 голосов
/ 21 июня 2019
class EventViewSet(viewsets.ModelViewSet):
    queryset = Event.objects.all()
    serializer_class = EventSerializer

    def get_queryset(self):
        return super().get_queryset().annotate(
            is_active=ExpressionWrapper(
                Q(start_date__lt=timezone.now()) & Q(end_date__gt=timezone.now()),
                output_field=BooleanField()
            ),
        )

    search_fields = [
        'name',
        'short_desc',
        'desc',
    ]

    filterset_fields = [
        'is_active',
    ]

У меня есть этот ViewSet, который я хочу отфильтровать по аннотированному полю, обычно вы можете просто фильтровать аннотацию в наборах запросов django, однако вышеперечисленное в сочетании с этим сериализатором:

class EventSerializer(serializers.ModelSerializer):
    is_active = serializers.SerializerMethodField()

    @staticmethod
    def get_is_active(obj):
        return obj.is_active

    class Meta:
        model = Event
        fields = [
            'timestamp',
            'id',
            'name',
            'short_desc',
            'desc',
            'start_date',
            'end_date',
            'is_active',
        ]

Я не углублялся в исходный код, но предположил бы, что он сделает простой qs.filter для полей в filterset_fields, но я получаю эту прекрасную ошибку, которая не может объяснить многое (по крайней мере, мне):

'Meta.fields' contains fields that are not defined on this FilterSet: is_active

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