尝试使用Django过滤器为给定mod中的所有字段创建常规搜索

2024-09-27 20:16:09 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我正在为我的模型创建一个自定义筛选器,我希望该筛选器中的所有字段不使用“精确”而是“包含”,但我不想手动添加所有字段。我正试着做这样的事情:

from django_filters import FilterSet
from polls.models import Question, Choice
from django_filters import rest_framework

class ChoiceFilter(FilterSet):
    for field in Choice._meta.get_fields():

        field = rest_framework.CharFilter(lookup_expr='icontains')
    #question = rest_framework.CharFilter(lookup_expr='icontains') #this works want to generalize this

    class Meta:
        model = Choice
        fields = '__all__'

所以第二行有效,但是我的for循环不行,我的过滤器使用'exact'而不是'contains'


Tags: djangofromimportrestfieldfieldsforframework
1条回答
网友
1楼 · 发布于 2024-09-27 20:16:09

您可以创建一个自定义的FilterSet类,该类重写get_fields方法,将查找从exact更改为{}:

class CustomFilterSet(FilterSet):
    @classmethod
    def get_fields(cls):
        fields = super().get_fields()
        for name, lookups in fields.items():
            lookups[:] = ['icontains']
        return fields

现在您只需使ChoiceFilter从该类继承:

^{pr2}$

请记住,将__all__用于字段被认为是危险的。在

相关问题 更多 >

    热门问题