[英]How can I add two complex statements in a correct way for queryset.filter in Django?
[英]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.