2017-07-21 82 views
0

我正在使用django-rest-framework和django-filter来实现过滤。 比方说,我有以下结果:如何用django-filter检查多对多列表是否为空?

{ 
    "id": 13, 
    "created": "2017-06-21T01:08:49.790254Z", 
    "updated": "2017-07-21T10:25:51.706730Z", 
    "toylist": [], 
} 

如何实现过滤,所以我可以检查toylist数组是空的?例如,像:/toys/?toylist__isnull=True

+0

您可以发布您当前的视图/ viewset类吗? –

+0

是的,在这里它是: 类ToysViewSet(viewsets.ModelViewSet): permission_classes = [permissions.IsAuthenticated] \t查询集= Toys.objects.all()ORDER_BY( ' - 创建') \t serializer_class = ToysSerializer \t filter_class = ToysFilter – okarimov

+0

和'ToysFilter'类,因为这是一个处理过滤 –

回答

0

好吧,这是一个相对简单的解决办法:

class ToysFilter(filters.FilterSet): 
    toylist__isnull = filters.BooleanFilter(name='toylist', method='list_is_empty') 

class Meta: 
    model = Toys 
    fields = { 
     'id':['exact'], 
     'created':'__all__', 
     'updated':'__all__', 
    } 

def list_is_empty(self, qs, name, value): 
    isnull = not value 
    lookup_expr = LOOKUP_SEP.join([name, 'isnull']) 

    return qs.filter(**{lookup_expr: isnull}).distinct() 
0

这是没有必要在这里使用的方法。更简单地说,您可以执行以下操作:

class ToysFilter(filters.FilterSet): 
    toylist__isnull = filters.BooleanFilter(name='toylist', lookup_expr='isnull', distinct=True)