如何在 JSONField 上使用 django-filter

Arb*_*ain 8 django django-templates django-models django-forms django-rest-framework

django-filter在 Model 的所有默认字段上都可以正常工作,但是当我们想要在 Postgres 字段(例如 JSONField)上使用它时就会出现问题

我有以下模型:

from django.contrib.postgres.fields import JSONField,ArrayField

class MyModel(models.Model):
    j_field = JSONField(blank=True,null=True,default=dict)
Run Code Online (Sandbox Code Playgroud)

j_field具有以下结构的数据:

[{"name":"john","work":"developer"},{"name":"cena","work":"teacher"}]
Run Code Online (Sandbox Code Playgroud)
  • 如何根据使用namework使用来过滤结果?j_fielddjango-filter
import django_filters

class MyModelFilter(django_filters.FilterSet)
  class Meta:
      model = MyModel 
        ...
        ...
        what's next?
Run Code Online (Sandbox Code Playgroud)

Dal*_*tor 7

基本上,您需要创建一个自定义方法来过滤:

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)
Run Code Online (Sandbox Code Playgroud)