首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JSON字段的Django FilterSet

JSON字段的Django FilterSet
EN

Stack Overflow用户
提问于 2022-04-27 14:20:42
回答 2查看 302关注 0票数 1

例如,我有一个简单的django模型:

代码语言:javascript
运行
复制
class SimpleModel(models.Model):
    some_attr = models.JSONField() #there is [attr1, attr2, ...] in JSON

简单观点:

代码语言:javascript
运行
复制
class SimpleView(ListCreateApivView):
    filter_backends = [DjangoFilterBackend, ]
    filterset_class = SimpleFilter

和简单的过滤器:

代码语言:javascript
运行
复制
class SimpleFilter(django_filters.FilterSet):
    class Meta:
        model = SimpleModel
        fields = {'some_attr': ['icontains', ]}

我想检查我的db‘中的[http://127.0.0.1/simple?some_attr__icontains=['Something](http://127.0.0.1/simple?some_attr__icontains=%5B%27Something),]在我的db中有JSONField,它包含a1、a2、a3 .所以,如何检查来自url在db JSONField中的值?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-04-28 09:57:58

谢谢您的回答,我解决了为JSON字段创建自定义过滤器的问题,如下所示:

代码语言:javascript
运行
复制
class CharInFilter(filters.BaseInFilter, filters.CharFilter):
    pass

class MainInfoFilter(filters.FilterSet):

    some_attr = CharInFilter(method='some_attr_filter')

    def some_attr_filter(self, queryset, name, value):
        query = Q()
        for type in value:
            query |= Q(license_types__icontains=type)
        if query:
            queryset = queryset.filter(query)
        return queryset
票数 1
EN

Stack Overflow用户

发布于 2022-04-27 14:36:48

我会像这样覆盖get_queryset方法:

views.py

代码语言:javascript
运行
复制
import json

class SimpleView(...):

    ...

    def get_queryset(self):

        # unpack the filter:
        filter_string = self.request.GET.get('filter', {})
        filter_dictionary = json.loads(filter_string)

        # filter queryset:
        queryset = self.queryset.filter(**filter_dictionary)

        return queryset

然后你可以在前面做这样的事情:

scripts.js

代码语言:javascript
运行
复制
// create a django like filter:
var filter = JSON.stringify({
  some_attr__some_key__icontains : 'some_value' 
});

// add the filter as a parameter to the url:
var url = 'api/simple_model/?filter=' + filter;

// send the request:
$.ajax({
  url : url,
  ...
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72030458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档