1

我有一个带有 ModelChoiceField 字段的表单,该字段可以为空(假设“全部选中”)或具有特定值。

创建一个选择所有记录或一些记录而不使用if-else语句的单个 QuerySet 的最佳方法是什么?

目前我正在使用这样的东西:

表格

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与两个单独的查询一起使用。

有没有办法创建一个单一的、多功能的查询?

正确的方法是什么?

谢谢你。

4

1 回答 1

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)

但是,您的代码很清楚,所以我不确定这会改善您的代码。

于 2013-10-03T11:30:46.823 回答