一味地對其進行編碼,做這樣的事情在你的forms.py
:
from django import Forms
from .models import Project
class ProjectFilterForm(forms.Form):
range = forms.ChoiceField(choices=[], required=False)
def __init__(self, *args, **kwargs):
super(ProjectFilterForm, self).__init__(*args, **kwargs)
oldest = Project.objects.first()
newest = Project.objects.last()
if oldest and newest:
range_choices = []
for year in range(oldest.date.year, newest.date.year+1):
range_choices.append('Spring {}'.format(year))
range_choices.append('Fall {}'.format(year))
self.fields['range'].choices = range_choices
def get_filtered_projects(self):
if not self.is_valid():
return []
choice = self.cleaned_data['range']
parts = choice.split(' ')
month_range = [4,5,6,7,8,9] if parts[0] == 'Spring' else [10,11,12,1,2,3]
year = int(parts[1])
return Project.objects.filter(date__year=year, date__month__in=month_range)
包括形式爲模板的一部分,在視圖中使用get_filtered_projects
生成的項目列表中提出,以顯示頁。
這取決於您是否要重新加載頁面,以便應用過濾器? –
重新加載頁面沒有問題。如果不重新加載是一個更好/更標準的做法,那麼我應該這樣做。 –