Vaibhav Jain
Vaibhav Jain

Reputation: 5507

How to perform Or Query using Django-Filter

class MyFilter(django_filters.FilterSet):
    class Meta:
        model = MyModel
        fields = {
            'field': ['exact',  'isnull'],
        }

Now How do I filter this ?field=1&field__isnull=True ???

Upvotes: 0

Views: 2737

Answers (4)

gaozhidf
gaozhidf

Reputation: 2819

you can view Customize filtering with Filter.method with django-filter 1.1.0, and code can be as below

    class MyFilter(django_filters.FilterSet):
        field = NumberFilter(method='field_exact_or_isnull_filter')

        class Meta:
            model = MyModel
            fields = [field]

        def field_exact_or_isnull_filter(self, queryset, name, value):
            return queryset.filter(
                Q(field=1) | Q(field=None)
            )

Upvotes: 1

Vaibhav Jain
Vaibhav Jain

Reputation: 5507

Solved it by adding a custom field.

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

Upvotes: 3

NIKHIL RANE
NIKHIL RANE

Reputation: 4092

For your reference use Django Filter doc

May be following example useful

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']

Upvotes: 0

Rong Zhao
Rong Zhao

Reputation: 318

I am confused, your question is how to perform OR query, however, your example is "&" (this usually means AND) if you want to make OR condition, you could use Q object

such as:

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

please refer to https://docs.djangoproject.com/en/1.10/ref/models/querysets/#django.db.models.Q for more information.

Greet.

Upvotes: 0

Related Questions