Django在Form和List视图之间传递** kwargs

时间:2017-04-20 09:10:09

标签: django python-3.x request kwargs

我对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"。

0 个答案:

没有答案