[英]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.