【发布时间】:2018-08-18 14:28:07
【问题描述】:
如何根据来自序列化程序的计算字段过滤结果?我试着把它当作任何其他领域,但 django 不喜欢它。
序列化器
class ImageSerializer(serializers.ModelSerializer):
is_annotated = serializers.SerializerMethodField('has_annotation')
class Meta:
model = Image
fields = '__all__'
@staticmethod
def has_annotation(image):
return image.annotation_set.count() > 0
查看
class ImageViewSet(viewsets.ModelViewSet):
serializer_class = ImageSerializer
lookup_field = 'id'
permission_classes = [
Or(IsAdmin),
IsAuthenticated
]
def get_queryset(self):
queryset = Image.objects
is_annotated_filter = self.request.query_params.get('is_annotated', None)
if is_annotated_filter is not None:
queryset = queryset.filter.annotate(
cnt=Count('annotation')).filter(cnt__gte=1)
queryset_order = get_queryset_order(self.request)
return queryset.order_by(queryset_order).all()
【问题讨论】:
标签: django django-rest-framework django-queryset