Django - 如何在自定义过滤器中将 "or"条件添加到 queryset.filter

标签 django django-queryset django-filter

我想制作一个搜索过滤器,它只使用一个搜索字段在多个条件下的多个字段中进行搜索。我有这个 filters.py 文件:

import django_filters
from .models import Product


class ProductFilter(django_filters.FilterSet):
    q = django_filters.CharFilter(method='search_filter', label='Cerca')

    class Meta:
        model = Product
        fields = ['q']

    def search_filter(self, queryset, name, value):
        return queryset.filter(name__icontains=value, sku__iexact=value)

return queryset.filter(name__icontains=value, sku__iexact=value) 不起作用,return queryset.filter(Product(name__icontains=value) | Product(sku__iexact=value) )) 我该怎么做?

最佳答案

您可以使用 Q objects [Django-doc] 进行过滤:

import django_filters
from django.db.models import Q
from .models import Product

class ProductFilter(django_filters.FilterSet):
    q = django_filters.CharFilter(method='search_filter', label='Cerca')

    class Meta:
        model = Product
        fields = ['q']

    def search_filter(self, queryset, name, value):
        return queryset.filter(<strong>Q(</strong>name__icontains=value<strong>) | Q(</strong>sku__iexact=value<strong>)</strong>)

关于Django - 如何在自定义过滤器中将 "or"条件添加到 queryset.filter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71798874/

相关文章:

python - 如何在 Django 中过滤 DateTimeField 的日期?

Django Rest Framework 在结果中随机返回空列表,但计数仍然正确

django - 重命名 django-filters 中的字段名称以进行显示

python - Django Rest Framework - 嵌套一对多的过滤器

Django:如何检查自定义窗口小部件定义中是否存在字段错误?

django - 使用 select_related 获取 related_name 对象

python - 优化 Django

django - 将原始 SQL 重写为 Django 查询

python - 将日期分为日、月、周 Django

Django-pipeline 'compressed' 不是有效的标签库 : ImportError raised loading pipeline. templatetags.compressed:没有名为 conf 的模块