假設我有個條目的博客我想按類別或日期選擇地過濾:對於我使用以下形式的濾波器濾波形式設計
#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語句,因爲窗體總是有效的(或者至少應該是類別和日期範圍是可選的,並且窗體的請求類型是'獲得」
- 是否有這類問題的任何其他優雅的解決方案嗎?我能想象它是非常常見的
該表格當然不總是有效的。如果我向您發送的請求的類別不是您給定的類別或未格式化爲日期的日期? – Xymostech 2013-04-28 22:45:55
兩者都被'date_filter'和'cat_filter'抓住了 – ProfHase85 2013-04-28 22:51:00
我不明白第2點。我沒有看到醜陋的'if'。它是'views.py'中的嗎? – 2013-04-29 02:20:31