Arbazz Hussain
Arbazz Hussain

Reputation: 1932

How to use django-filter on JSONField

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"}]
import django_filters

class MyModelFilter(django_filters.FilterSet)
  class Meta:
      model = MyModel 
        ...
        ...
        what's next?

Upvotes: 8

Views: 4657

Answers (1)

Dalvtor
Dalvtor

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

Related Questions