Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.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
Python 为什么表单返回';方法不允许';在DJANGO中扩展CreateView CBV时_Python_Django_Python 3.x_Django Forms_Django Views - Fatal编程技术网

Python 为什么表单返回';方法不允许';在DJANGO中扩展CreateView CBV时

Python 为什么表单返回';方法不允许';在DJANGO中扩展CreateView CBV时,python,django,python-3.x,django-forms,django-views,Python,Django,Python 3.x,Django Forms,Django Views,我不确定这里有什么地方不正常。CBV CreateView包含一个表单,但当我尝试单击模板中的“提交”时,我收到“错误”方法不允许(POST) forms.py class DateInput(forms.DateInput): input_type = 'date' class BookingForm(forms.ModelForm): class Meta: model = Booking fields = ('check_in',

我不确定这里有什么地方不正常。CBV CreateView包含一个表单,但当我尝试单击模板中的“提交”时,我收到“错误”
方法不允许(POST)

forms.py

class DateInput(forms.DateInput):
    input_type = 'date'

class BookingForm(forms.ModelForm):
    class Meta:
        model = Booking
        fields = ('check_in', 
                'check_out')
        widgets = {
            'check_in': DateInput(),
            'check_out': DateInput()
        }

只是形式而已 HTML


{%csrf_令牌%}
{{form | crispy}}
有人知道为什么吗?

正如错误所说,a没有实现POST请求的处理程序。因此,如果您向处理程序发出POST请求,它将生成HTTP 405错误:方法不允许

因此,我们需要自己为POST请求实现一个处理程序。好消息是,许多功能已经在中实现。因此,我们可以这样实施:

class PropertyDetailView(ModelFormMixin, DetailView):
    model = PropertyListing
    context_object_name = 'name'
    template_name = 'core/property-detail.html'
    form_class = BookingForm
    success_url = ...

    def get_context_data(self, *args, **kwargs):
        context = super(PropertyDetailView, self).get_context_data(**kwargs)
        context['property_details'] = PropertyListing.objects.filter(pk=self.kwargs.get('pk'))
        return context

    def post(self, *args, **kwargs):
        self.object = None
        form = self.get_form()
        if form.is_valid():
            return self.form_valid(form)
        else:
            return self.form_invalid(form)
class PropertyDetailView(ModelFormMixin,DetailView):
模型=属性列表
上下文\对象\名称='name'
模板名称='core/property detail.html'
form_class=预订表单
成功\u url=。。。
def获取上下文数据(self、*args、**kwargs):
context=super(PropertyDetailView,self)。获取上下文数据(**kwargs)
context['property\u details']=PropertyListing.objects.filter(pk=self.kwargs.get('pk'))
返回上下文
def post(自我,*args,**kwargs):
self.object=None
form=self.get\u form()
如果form.is_有效():
返回self.form\u有效(form)
其他:
返回self.form\u无效(form)
因此,您不需要将
表单
添加到上下文数据中(ModelFormMixin将这样做),也不需要自己处理表单。但是,您将需要指定或重写

也就是说,使用a或an可能更好,只需应用一些代码更改即可向其中添加对象的详细信息。

如错误所述,a不实现POST请求的处理程序。因此,如果您向处理程序发出POST请求,它将生成HTTP 405错误:方法不允许

因此,我们需要自己为POST请求实现一个处理程序。好消息是,许多功能已经在中实现。因此,我们可以这样实施:

class PropertyDetailView(ModelFormMixin, DetailView):
    model = PropertyListing
    context_object_name = 'name'
    template_name = 'core/property-detail.html'
    form_class = BookingForm
    success_url = ...

    def get_context_data(self, *args, **kwargs):
        context = super(PropertyDetailView, self).get_context_data(**kwargs)
        context['property_details'] = PropertyListing.objects.filter(pk=self.kwargs.get('pk'))
        return context

    def post(self, *args, **kwargs):
        self.object = None
        form = self.get_form()
        if form.is_valid():
            return self.form_valid(form)
        else:
            return self.form_invalid(form)
class PropertyDetailView(ModelFormMixin,DetailView):
模型=属性列表
上下文\对象\名称='name'
模板名称='core/property detail.html'
form_class=预订表单
成功\u url=。。。
def获取上下文数据(self、*args、**kwargs):
context=super(PropertyDetailView,self)。获取上下文数据(**kwargs)
context['property\u details']=PropertyListing.objects.filter(pk=self.kwargs.get('pk'))
返回上下文
def post(自我,*args,**kwargs):
self.object=None
form=self.get\u form()
如果form.is_有效():
返回self.form\u有效(form)
其他:
返回self.form\u无效(form)
因此,您不需要将
表单
添加到上下文数据中(ModelFormMixin将这样做),也不需要自己处理表单。但是,您将需要指定或重写


也就是说,使用a或an可能更好,只需应用一些代码更改即可向其中添加对象的详细信息。

a
DetailView
通常不接受POST调用。您可以实现
def post(..)
,但最好使用
FormMixin
这有大量重复项。请注意,与标题相反,您没有扩展CreateView。
DetailView
通常不接受post调用。您可以实现
def post(..)
,但最好使用
FormMixin
这有大量重复项。请注意,与标题相反,您没有扩展CreateView。
class PropertyDetailView(ModelFormMixin, DetailView):
    model = PropertyListing
    context_object_name = 'name'
    template_name = 'core/property-detail.html'
    form_class = BookingForm
    success_url = ...

    def get_context_data(self, *args, **kwargs):
        context = super(PropertyDetailView, self).get_context_data(**kwargs)
        context['property_details'] = PropertyListing.objects.filter(pk=self.kwargs.get('pk'))
        return context

    def post(self, *args, **kwargs):
        self.object = None
        form = self.get_form()
        if form.is_valid():
            return self.form_valid(form)
        else:
            return self.form_invalid(form)