Reputation: 5507
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
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
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
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
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