假设我有一个包含条目的博客,我想按类别或日期进行过滤:对于过滤器,我使用以下表格
#forms.py
class MyForm(forms.Form):
categories = forms.ModelMultipleChoiceField(Category.objects.all(),
required=False)
start_date = forms.DateField(required=False)
end_date = forms.DateField(required=False)
我有以下观点:
#views.py
blog_entries = Blog.objects.all()
cat_filter = TurnoverFilterForm(request.GET)
if cat_filter.is_valid():
categories_chosen = cat_filter.cleaned_data['categories']
start_date = cat_filter.cleaned_data['start_date']
end_date = cat_filter.cleaned_data['end_date']
blog_entries = blog_entries.cat_filter(categories_chosen).date_filter(start_date,end_date)
return render(request,'index.html',{'blog_entries':blog_entries}
自定义管理器功能在哪里date_filter
以及在哪里(哪些工作)。cat_filter
问题是:
- 我真的需要将表单中的每个字段设为可选吗?这些情况是否有任何可选表格?(因为有很多代码冗余)
- 我的表单中有一个丑陋的 if 语句,因为表单始终有效(或者至少应该是类别,日期范围是可选的,并且表单的请求类型是“获取”
- 对于此类问题,还有其他优雅的解决方案吗?我可以想象这真的很常见