Python 如何在我的queryset上实现或运行
我目前已经创建了一个模型,如下所示Python 如何在我的queryset上实现或运行,python,django,django-forms,django-views,Python,Django,Django Forms,Django Views,我目前已经创建了一个模型,如下所示 class Customer(models.Model): first_name = models.CharField(max_length=200, null=True) middle_name = models.CharField(max_length=200, blank=True,default='') last_name = models.CharField(max_length=200, null=True) em
class Customer(models.Model):
first_name = models.CharField(max_length=200, null=True)
middle_name = models.CharField(max_length=200, blank=True,default='')
last_name = models.CharField(max_length=200, null=True)
email = models.CharField(max_length=200, null=True)
class CustomerlistFilter(django_filters.FilterSet):
id = CharFilter(lookup_expr='icontains')
first_name = CharFilter(lookup_expr='iexact')
middle_name = CharFilter(lookup_expr='iexact')
last_name = CharFilter(lookup_expr='iexact')
class Meta:
model = Customer
fields = ['id', 'first_name', 'middle_name', 'last_name']
在我看来.py
我有
customer_list = Customer.objects.all()
myFilter1 = CustomerlistFilter(request.GET,queryset=customer_list)
customer_list = myFilter1.qs
在my filters.py中,我编写了如下所示的内容
class Customer(models.Model):
first_name = models.CharField(max_length=200, null=True)
middle_name = models.CharField(max_length=200, blank=True,default='')
last_name = models.CharField(max_length=200, null=True)
email = models.CharField(max_length=200, null=True)
class CustomerlistFilter(django_filters.FilterSet):
id = CharFilter(lookup_expr='icontains')
first_name = CharFilter(lookup_expr='iexact')
middle_name = CharFilter(lookup_expr='iexact')
last_name = CharFilter(lookup_expr='iexact')
class Meta:
model = Customer
fields = ['id', 'first_name', 'middle_name', 'last_name']
是否有方法实现OR函数,以便我可以为每个字段使用一个搜索框而不是多个搜索框 我认为您不必使用
过滤器集
,因为过滤器集
是一套过滤方法
您可以只使用H进行筛选:
from django.db.models import Q
customer_list = Customer.objects.filter(
Q(id__icontains=search_query) |
Q(first_name__icontains=search_query) |
Q(middle_name__icontains=search_query) |
Q(last_name__icontains=search_query)
)
我认为您不必使用
FilterSet
,因为FilterSet
是一套过滤方法
您可以只使用H进行筛选:
from django.db.models import Q
customer_list = Customer.objects.filter(
Q(id__icontains=search_query) |
Q(first_name__icontains=search_query) |
Q(middle_name__icontains=search_query) |
Q(last_name__icontains=search_query)
)
将“search_query=request.GET.GET('name-of-input-item')”替换为“myFilter1=CustomerlistFilter(request.GET,queryset=customer_list)”@kamcoder:否,这将获取您在表单中提交的数据(请注意,
输入项的名称
应替换为元素的名称=“…”字段中的值)。。。然后用Customer.objects.all()
queryset和Customer.objects.filter(…)
过滤Customer.objects.all()
queryset。我明白,在这种情况下需要filters.py吗?谢谢先生,我非常感谢您的帮助。是否将“search\u query=request.GET.GET('name-of-input-item')”替换为“myFilter1=CustomerlistFilter(request.GET,queryset=Customer\u list)”@kamcoder:否,这将获取您在表单中提交的数据(请注意,输入项的名称
应替换为
`元素的名称=“…”属性中的值)。。。然后过滤Customer.objects.all()
queryset和Customer.objects.filter(…)
。我知道,这种情况下需要filters.py吗?谢谢先生,我感谢您的帮助。