2016-10-08 11 views

答えて

1

有用な例を、以下のことができます。

def filter_field_or_null(queryset, value): 
    return queryset.filter(
     Q(field=value) | Q(field__isnull=True) 
    ) 


class MyFilter(django_filters.FilterSet): 
    field_or_null = django_filters.ModelChoiceFilter(
     queryset=SomeModel.objects.all(), 
     action=filter_field_or_null 
    ) 

    class Meta: 
     model = MyModel 
0

私は混乱しています、あなたの質問に実行したり、クエリする方法です、しかし、あなたの例では「&」である(これは通常のANDを意味する)あなたが作るOR条件にしたい場合は、Qオブジェクトを使用することができ

など:

Q(field=1) | Q(field__isnull=True) 

詳細については、https://docs.djangoproject.com/en/1.10/ref/models/querysets/#django.db.models.Qを参照してください。

あなたの参照の使用Django Filterドキュメント

については

+0

これは、「Django-Filter」を参照してください。 –

+0

@vaibhavjain、申し訳ありませんが、私はあなたのポイントを正しく取得していませんでした...また、OR条件を組み合わせるためにQオブジェクトを使用する必要があります... – zhaorong

+0

@zhaorong - OPでは完全にはっきりしませんが、 '?field = 1&field__isnull = True 'はURLクエリ文字列です。 '&'はキーと値のペアの間の単なるセパレータです。 – Sherpa

0

は、カスタムフィールドを追加することによってそれを解決

from django.db import models 
import django_filters 

class Mymodel(models.Model): 
    field1 = models.CharField(max_length=255) 
    field2 = models.IntegerField(null=True) 


class MyFilter(django_filters.FilterSet): 
    field1__iexact = django_filters.CharFilter(lookup_expr='iexact') 
    field1__isnull = django_filters.CharFilter(lookup_expr='isnull') 

    class Meta: 
     model = Product 
     fields = ['field1'] 
+0

私の質問は、同じフィールド上で異なるフィルタを実行することです。 –

+0

@vaibhav jain編集された回答を参照してください –

+0

もし私が '?field__iexact = &field__isnull ='すれば、 'some_idとすべてのヌルオブジェクト'を得るでしょうか??私はそうは思わない。まず、クエリセットの 'some_id'をフィルタリングし、' null'オブジェクトをフィルタリングし、クエリの 'ANed'を返します。そして私は 'Or'を欲しいので、私が提出した答えを見てください。 –

関連する問題