我对Django很新,我正在尝试完成一些代码,其中我有一个用户输入日期范围的表单,以及#34; start_date& END_DATE"一旦进入,我希望它重定向到列表视图并传递** kwargs。我在这方面遇到了很多麻烦,最终找到了解决问题的方法,但它可能看起来像开发人员的噩梦。
到目前为止,我的问题是,当我把它作为两个单独的视图时,我根本无法让** kwargs完全过去,它只列出了所有结果。
Views.py
class BirthdayRangeFormView(FormView):
template_name = 'snippets/date_selection_form.html'
form_class = datefilterform
def get_form_kwargs(self):
kwargs = super(BirthdayRangeFormView, self).get_form_kwargs()
kwargs ['request'] = self.request
return kwargs
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['title'] = "Date Selection"
context['header'] = "Please select date range"
return context
def form_valid(self, form):
self.start_date = (form.cleaned_data['start_date'], Person.next_birthday)
self.end_date = (form.cleaned_data['end_date'], Person.next_birthday)
return self.redirect_to_results()
def redirect_to_results(self):
self.success_url = "dates:birthdays"
return redirect(
self.get_success_url(),
)
if redirect_to_results:
class BirthdayRangeFormView(ListView):
template_name = 'dates/birthdays.html',
context_object_name = "people"
people = True
def get_queryset(self, **kwargs):
if self.people:
qs = qs.filter(
classification__in=people,
)
else:
qs = qs.exclude(
classification__in=people,
)
qs = qs.filter(
next_birthday__range=(
parse(
kwargs.get(
'start_date',
month_start(timezone.now()).date().strftime('%Y-%m-%d')
)
),
parse(
kwargs.get(
'end_date',
month_end(timezone.now()).date().strftime('%Y-%m-%d')
)
),
)
)
return qs.order_by('next_birthday')
我正在寻找更好的方法来构建此代码,所需的任何进一步信息都让我知道。
由于
使用的模型称为" Person"。