用户输入并提交的表单中有两个条件用于筛选数据库。因为用户可能会留下这两个空白,所以我做了一些场景。如果为空,则在数据库中不需要按此约束进行过滤。你知道吗
默认值为“无”。你知道吗
这是我引用的帖子:django conditionally filtering objects
我试了两种方法,都不管用,希望有人能帮忙:
第一条路
if criteria_1 is None and criteria_2 !=None: return Q(criteria_2=criteria_2)
elif criteria_2 is None and criteria_1 !=None: return Q(criteria_1=criteria_1)
elif criteria_1 !=None and criteria_2 !=None: return Q(criteria_2=criteria_2,criteria_1=criteria_1)
elif criteria_1 is None and criteria_2 is None: return Q()
else: return Q()
queryset=XXX.objects.filter(Q,date_new__range=[start_date,end_date])
第二条路
only_criteria_1_none=Q(criteria_1__isnull=True)
only_criteria_2_none=Q(criteria_2__isnull=True)
both_selected=Q(criteria_1=criteria_1,criteria_2=criteria_2)
both_none=Q(criteria_1__isnull=True,criteria_2__isnull=True)
查询集=三十、 对象.过滤器(仅|标准|无|仅|标准|无|均选|均|无)
方法3---编辑
你知道吗表单.py你知道吗
iquery = XXX.objects.values_list('region', flat=True).distinct()
iquery_choices = [('', '')] + [(region,region) for region in iquery]
region = forms.ChoiceField(choices=iquery_choices,required=False,widget=forms.Select())
-----国家相同------默认值为“”
你知道吗视图.py你知道吗
if country =="" and region !="":
queryset=XXX.objects.filter(country,date_new__range=[start_date,end_date])
if region ="" and country !="":
queryset=XXX.objects.filter(region,date_new__range=[start_date,end_date])
。。。。。。。。。。
提前谢谢。你知道吗
我不太明白为什么您需要使用
Q
,django的查询集做得很慢,所以在您真正需要结果之前它不会运行。。你知道吗这使您的查询看起来更容易理解。你知道吗
相关问题 更多 >
编程相关推荐