我有一个带有ModelChoiceField字段的表单,该字段可以为空(假设为“全部选中”)或具有特定值。
创建单个QuerySet的最佳方法是在不使用 if-else 语句的情况下选择所有记录或某些记录?
目前我使用的是这样的东西:
表格:
class MyForm(forms.Form):
operators = forms.ModelChoiceField(
queryset=EpayOperators.objects.all(),
label="Choose operator",
empty_label="All",
required=False)
...
查看:
# Any security and validation checks are ommited
...
if request.POST.get('operators'):
# Some operator was selected
payments = Transactions.objects.filter(date=my_date, sum=my_sum, operator=MyForm.cleaned_data['operators'])
else:
# None selected, display all operators
payments = Transactions.objects.filter(date=my_date, sum=my_sum)
我觉得这不是pythonic的方法:使用if-else和两个分离查询。
有没有办法创建单一的,多功能的查询?
这样做的正确方法是什么?
谢谢。
答案 0 :(得分:0)
你可以这样做:
filter_args = {}
filter_args['date'] = my_date
filter_args['sum'] = my_sum
if request.POST.get('operators'):
filter_args['operator'] = MyForm.cleaned_data['operators']
payments = Transactions.objects.filter(**filter_args)
但是你的代码很清楚,所以我不确定这会改进你的代码。