第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Django:警告 - 不允許使用方法(POST)

Django:警告 - 不允許使用方法(POST)

慕田峪4524236 2023-06-27 14:44:54
我知道上面的錯誤意味著什么。似乎我無法在發(fā)布表單時處理它。我可以在基于函數(shù)的視圖中做到這一點,但在基于類的視圖中我有點迷失了。我正在創(chuàng)建一個評論應用程序,以下是應用程序forms.py中的內(nèi)容comment:class CommentForm(forms.Form):    content_type = forms.CharField(widget=forms.HiddenInput)    object_id = forms.CharField(widget=forms.HiddenInput)    body = forms.CharField(widget=forms.Textarea)然后在DetailView博客應用程序中,我這樣處理:class BlogDetail(DetailView):    model = Blog    template_name = 'blogs/blog_detail.html'    context_object_name = 'blog'    def get_object(self):        blog_slug = self.kwargs.get('blog_slug')        return get_object_or_404(Blog, slug=blog_slug)    def get_context_data(self, *args, **kwargs):        obj = self.get_object()        context = super().get_context_data(**kwargs)        context['comments'] = Comment.objects.filter_by_instance(obj)        """ comment form """        initial_data = {            'content_type': obj.get_content_type,            'object_id': obj.id        }        if self.request.method == 'POST':            form = CommentForm(self.request.POST, initial=initial_data)            if form.is_valid():                c_type = form.cleaned_data.get('content_type')                content_type = ContentType.objects.get(model=c_type)                object_id = form.cleaned_data.get('object_id')                body = form.cleaned_data.get('body')                new_comment, created = Comment.objects.get_or_create(                    user=self.request.user,                    content_type=content_type,                    object_id=object_id,                    body=body                )        else:             form = CommentForm(initial=initial_data)        context['comment_form'] = form        return context雖然我通過了form = CommentForm(self.request.POST, initial=initial_data),但聽起來出了問題,有人可以幫忙嗎?謝謝
查看完整描述

3 回答

?
一只萌萌小番薯

TA貢獻1795條經(jīng)驗 獲得超7個贊

帖子由post基于類的視圖的方法處理:


class BlogDetail(DetailView):

    # ...

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

        # all your form processing

Django 附帶了多個視圖,它們已經(jīng)提供了表單處理過程的各種掛鉤,例如 FormView,您可以利用它們:


class BlogDetail(DetailView, FormView):

    form_class = CommentForm


    def form_valid(self, form):

        c_type = form.cleaned_data.get('content_type')

        # ...


    def get_initial(self):

        obj = self.get_object()

        return {

            'content_type': obj.get_content_type,

            'object_id': obj.id

        }


    # ....

默認情況下,表單被傳遞"form"到上下文中。


查看完整回答
反對 回復 2023-06-27
?
子衿沉夜

TA貢獻1828條經(jīng)驗 獲得超3個贊

你不需要DetailView. 您只需使用 CreateView 即可。我認為你已經(jīng)正確覆蓋了所有內(nèi)容,以便能夠放棄 DetailView,除了 get_form_kwargs() 之外。

然而...

我通常會以不同的方式處理這個問題,因為它很混亂而且很老套。相反,您可以通過 get_context_data() 將表單添加到 DetailView,然后在模板 post 中添加到/blog/{id}/comment/create,其中您有 CreateView。這讓事情變得簡單多了。


查看完整回答
反對 回復 2023-06-27
?
慕絲7291255

TA貢獻1859條經(jīng)驗 獲得超6個贊

要允許向您的視圖發(fā)送發(fā)布請求,請編寫一個def post(self, request, *args, **kwargs)將接收發(fā)布請求的函數(shù)。如果您想像處理 get 一樣處理此問題,請將其重定向到 get 函數(shù)

def post(self, request, *args, **kwargs):
    return self.get(request, *args, **kwargs)


查看完整回答
反對 回復 2023-06-27
  • 3 回答
  • 0 關注
  • 313 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號