繁体   English   中英

Django - 如何在自定义过滤器中向 queryset.filter 添加“或”条件

[英]Django - How to add "or" condition to queryset.filter in custom 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对象进行过滤[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(Q(name__icontains=value) | Q(sku__iexact=value))

如果没有Q() ,您还可以运行OR,如下所示:

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): # Here
        return queryset.filter(name__icontains=value) | \
               queryset.filter(sku__iexact=value)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM