繁体   English   中英

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

[英]Single QuerySet to select some records or all records

我有一个带有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)

我觉得这不是Python的方法:将if-else与两个单独的查询一起使用。

有什么方法可以创建单个通用查询?

正确的做法是什么?

谢谢。

你可以做:

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)

但是您的代码很清晰,因此我不确定这是否可以改善您的代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM