2017-07-21 53 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)