如何在JSONField上使用django筛选器
如何在JSONField上使用django筛选器,django,django-models,django-rest-framework,django-forms,django-templates,Django,Django Models,Django Rest Framework,Django Forms,Django Templates,django-filter在模型的所有默认字段上都能很好地工作,但当我们想在postgres字段(如JSONField)上使用它时,问题就来了 我有以下型号: from django.contrib.postgres.fields import JSONField,ArrayField class MyModel(models.Model): j_field = JSONField(blank=True,null=True,default=dict) j_字段的数据结构如下: [{"
django-filter
在模型的所有默认字段上都能很好地工作,但当我们想在postgres字段(如JSONField)上使用它时,问题就来了
我有以下型号:
from django.contrib.postgres.fields import JSONField,ArrayField
class MyModel(models.Model):
j_field = JSONField(blank=True,null=True,default=dict)
j_字段
的数据结构如下:
[{"name":"john","work":"developer"},{"name":"cena","work":"teacher"}]
- 如何使用
根据django filter
j_字段中的
或name
过滤结果work
基本上,您需要创建一个自定义方法进行筛选:
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)
对于答案,我有点困惑,比如如何在视图中实现它,下面是我正在做的:
https://pastebin.com/raw/zrSAXJuA
,您能帮我更正一个代码片段,以便在template.work\u filter()和name\u filter()上实现它吗接受3个位置参数,但在尝试http://localhost:9200/pfilter?work=teacher
对不起,添加self
作为第一个参数。我更新了答案
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)