单个QuerySet选择一些记录或所有记录

时间:2013-10-03 11:23:08

标签: python django-models django-forms

我有一个带有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和两个分离查询。

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

这样做的正确方法是什么?

谢谢。

1 个答案:

答案 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)

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