【发布时间】:2021-09-04 17:39:54
【问题描述】:
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',
]
我没有深入研究源代码,但我认为它会为 filterset_fields 中的字段执行一个简单的 qs.filter,但我得到了这个无法解释的漂亮错误(至少我):
'Meta.fields' contains fields that are not defined on this FilterSet: is_active
【问题讨论】:
标签: python django django-rest-framework