Reputation: 1932
django-filter
works good on all the default fields of Model, but problem comes when we want to work it on postgres fields such as JSONField
I have the following model:
from django.contrib.postgres.fields import JSONField,ArrayField
class MyModel(models.Model):
j_field = JSONField(blank=True,null=True,default=dict)
j_field
has data in the following structure:
[{"name":"john","work":"developer"},{"name":"cena","work":"teacher"}]
name
or work
from j_field
using django-filter
?import django_filters
class MyModelFilter(django_filters.FilterSet)
class Meta:
model = MyModel
...
...
what's next?
Upvotes: 8
Views: 4657
Reputation: 3286
Basically you need to create a custom method to filter:
import django_filters
class MyModelFilter(django_filters.FilterSet)
class Meta:
model = MyModel
fields = ('name', 'work')
name = django_filters.CharFilter(
method='name_filter'
)
work = django_filters.CharFilter(
method='work_filter'
)
def name_filter(self, queryset, name, value):
return queryset.filter(j_field__name__iexact=value)
def work_filter(self, queryset, name, value):
return queryset.filter(j_field__work__iexact=value)
Upvotes: 7