【问题标题】:django-filter searching on multiple fields and modelsdjango-filter 搜索多个字段和模型
【发布时间】:2020-11-02 17:35:26
【问题描述】:

我正在寻找一种方法来过滤来自两个模型的两个输入(nameplace) (摄影师和地点);但是,MultipleChoiceFilter 似乎对我不起作用,因为我需要添加更多复杂逻辑,这些逻辑在我的自定义过滤器中执行,如下所示。

from django.db.models import Q
from django_filters import rest_framework as filters


class SearchResultFilter(filters.FilterSet):
    name = filters.CharFilter('Photographer')
    place = filters.CharFilter(method='location_filter', distinct=True)

    class Meta:
        model = models.Photographer
        fields = ('name')

   def location_filter(self, queryset, name, value):
       """My complex logic"""
         .
         .
         .
       model = models.Location.filter(Q(location__icontains=value))
       return model

问题是“有没有办法可以将 name 输入字段放在我的 location_filter 中,以便我可以过滤两个输入(name place)在这个函数中并从这里返回一个想要的 querySet”。

我尝试在 location_filter 中使用 self.name;但是,产生了错误日志。我猜这里的“名称”不是类变量

【问题讨论】:

    标签: django django-rest-framework django-filter


    【解决方案1】:

    您可以使用 ?q=<value> 模拟 Django 内置多重搜索的行为

    from django.db.models import Q
    
    def multiple_search(queryset, name, value):
        queryset = queryset.filter(Q(name__icontains=value) | Q(place__icontains=value))
        return queryset
    
    class SearchResultFilter(django_filters.FilterSet):
        ...
        q = django_filters.CharFilter(label='name or place', method=multiple_search)
    

    【讨论】:

    • 感谢您的评论。但是这样做,这意味着只有一个来自 GET 请求的输入。我期待为 GET 请求检索两个字段,例如搜索“John”和“England”。系统会从Photographer模型中查询“John”,从Location模型中查询“England”,这里有Photographer模型作为外键。如果我没有正确理解,请指导我。
    猜你喜欢
    • 2018-03-23
    • 2015-09-09
    • 2020-04-20
    • 1970-01-01
    • 1970-01-01
    • 2013-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多