Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 如何在ListView中显示表单查询结果_Django_Python 3.x_Listview_Request - Fatal编程技术网

Django 如何在ListView中显示表单查询结果

Django 如何在ListView中显示表单查询结果,django,python-3.x,listview,request,Django,Python 3.x,Listview,Request,我创建了一个表单,用户可以在其中输入日期范围。一旦提交,它就需要从我的数据库中返回一份名单,上面列出了所有生日在该日期范围内的人。我是Django的新手,我尝试过但不知道如何将我的“开始日期和结束日期”作为kwargs从我的表单传递到ListView views.py: class BirthdaysRangeFormView(FormView): template_name = 'snippets/date_selection_form.html' form_class = d

我创建了一个表单,用户可以在其中输入日期范围。一旦提交,它就需要从我的数据库中返回一份名单,上面列出了所有生日在该日期范围内的人。我是Django的新手,我尝试过但不知道如何将我的“开始日期和结束日期”作为kwargs从我的表单传递到ListView

views.py:

class BirthdaysRangeFormView(FormView):
    template_name = 'snippets/date_selection_form.html'
    form_class = datefilterform

    def get_form_kwargs(self):
        kwargs = super(BirthdaysRangeFormView, 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'], People.next_birthday)
        self.end_date = (form.cleaned_data['end_date'], People.next_birthday)
        return self.redirect_to_results()

    def redirect_to_results(self):
        self.success_url = "dates:birthdays"
        return redirect(
            self.get_success_url(),
        )


class BirthdaysListView(BirthdaysRangeFormView, ListView):
    template_name = 'dates/birthdays.html',
    context_object_name = "person"
    person = True
    # queryset = People.objects.order_by('next_birthday')


    def get_queryset(self):
        test = ''
forms.py:

class datefilterform(forms.Form):
    model = People



    start_date = forms.DateField(
        input_formats=['%d/%m/%Y'],
        widget=DateTimePicker(
            options={"format": "DD/MM/YYYY", "pickTime": False})
    )

    end_date = forms.DateField(
        input_formats=['%d/%m/%Y'],
        widget=DateTimePicker(
            options={"format": "DD/MM/YYYY", "pickTime": False})
    )

    People.next_birthday = start_date
    People.next_birthday = end_date

    def __init__(self, *args, **kwargs):
        self.request = kwargs.pop('request')
        super(datefilterform, self).__init__(*args, **kwargs)

        self.helper = FormHelper()
        self.helper.form_id = 'main_form'
        self.helper.form_class ='form-horizontal'
        self.helper.label_class = 'col-lg-3'
        self.helper.field_class = 'col-lg-8'

        self.helper.layout = Layout(

            'start_date',
            'end_date',
            FormActions(
                Submit('submit', 'Submit'),
                Button('cancel', 'Cancel', css_class='cancel')
            )
        )

    def clean(self):

        cleaned_data = super().clean()
        start_date = cleaned_data.get("start_date")
        end_date = cleaned_data.get("end_date")

        if not check_end_date(start_date, end_date):
            raise forms.ValidationError(
                "Incorrect Dates entered, End date must be after start date"
            )

我以前做过简单的列表视图,但我不知道如何在基于类的视图中使用“request”。

您只需在基于类的视图中访问
self.request

而是遵循以下格式,以便可以在同一视图中处理POST和GET请求

class MyView(FormView):
   template_name = 'some_template.html'
   success_url = '...'
   form_class = MyForm

   def get(self, request, *args, **kwargs):
      pass

   def post(self, request, *args, **kwargs):
      pass


   def form_invalid(self, form, **kwargs):
      pass


   def form_valid(self, form, **kwargs):
      pass
   .....

您只需在基于类的视图中访问
self.request

而是遵循以下格式,以便可以在同一视图中处理POST和GET请求

class MyView(FormView):
   template_name = 'some_template.html'
   success_url = '...'
   form_class = MyForm

   def get(self, request, *args, **kwargs):
      pass

   def post(self, request, *args, **kwargs):
      pass


   def form_invalid(self, form, **kwargs):
      pass


   def form_valid(self, form, **kwargs):
      pass
   .....

我不明白你的意思,比如它需要进入def get查询集还是def get等。我曾经尝试过
self.request=kwargs.get('start\u date',month\u start(timezone.now()).date().strftime('%Y-%m-%d'))
self.request=kwargs.get('end_date',month_end(timezone.now()).date().strftime(“%Y-%m-%d”))
是否会有这样的问题您从一个视图调用下一个视图?这是一个糟糕的做法@LewisCollins我已经准备了上面的代码。这可能会对您有所帮助。从上面的代码中,我不明白如何才能在一个视图中传递所有内容我不明白您的意思,比如它需要进入def get\u queryset吗或者一个def get等。我曾经尝试过
self.request=kwargs.get('start\u date',month\u start(timezone.now()).date().strftime('%Y-%m-%d'))
self.request=kwargs.get('end\u date',month\u end(timezone.now()).date().strftime('%Y-%m-%d')))
会不会是这些方面的问题您从一个视图调用下一个视图?这是一个糟糕的做法@LewisCollins我已经准备了上面的代码。这可能会对您有所帮助。从上面的代码来看,我不明白如何在一个视图中传递所有内容