【问题标题】:Getting an error 405 when submitting formview from detailview从详细视图提交表单视图时出现错误 405
【发布时间】:2020-10-20 06:38:24
【问题描述】:

我有 detailview、formview 和 mail 工作。但它给了我一个 405 错误,而不是重定向回页面。请给我一些眼睛。我不明白为什么它不起作用。我最近 3 将 # 从 .net mvc 切换到了 python/django。感谢您的帮助。

FORMS.PY

class MessageSellerForm(forms.Form):
contact_name = forms.CharField(max_length=100, required=True)
contact_email = forms.EmailField(required=True)
content = forms.CharField(required=True, widget=forms.Textarea)

VIEWS.PY 类 PostDetailView(DetailView): 模型 = 广告 template_name = 'x_ads/ad_detail.html'

def get_context_data(self, **kwargs):
    context = super(PostDetailView, self).get_context_data(**kwargs)
    context['form'] = MessageSellerForm
    return context




    class PostDetail(View):

    def get(self, request, *args, **kwargs):
      view = PostDetailView.as_view()
      return view(request, *args, **kwargs)

def post(self, request, *args, **kwargs):
    view = PostDetailView.as_view()
    return view(request, *args, **kwargs)


class PostMessageSeller(SingleObjectMixin, FormView):
template_name = 'x_ads/ad_detail.html'
form_class = MessageSellerForm
success_url = '/'

subject = 'User message about your ad'
from_email = '********'
to_email = '*********'
message = '**********'
send_mail(subject=subject, message=message, from_email=from_email,
          recipient_list=[to_email], fail_silently=False)

model = Ad

def post(self, request, *args, **kwargs):
    if not request.user.is_authenticated:
        return HttpResponseForbidden()
    self.object = self.get_object()
    return super().post(request, *args, **kwargs)

ad_detail.html

<form method="POST">
        {% csrf_token %}
        <fieldset class="form-group">
            {{ form|crispy }}
        </fieldset>
        <div class="form-group">
            <button class="btn btn-1 btn-sm" type="submit">Message Seller</button>
        </div>
    </form>

【问题讨论】:

    标签: django formview detailview


    【解决方案1】:

    它显示详细模型,因此我使用 ModelFormMixin 在 DetailView 页面中添加了一个 Comment 部分。

    这是我的 .py 代码

    def get_context_data(self, *args, **kwargs):
        context = super(PostDetailView, self).get_context_data(*args, **kwargs)
        context['form'] = self.get_form()
        return context
    
    def get_absolute_url(self):
        return reverse(request, 'basic_app:post_detail', kwargs={'pk':self.pk})
    

    【讨论】:

    • 感谢您的回复。但是,我无法使用您的信息。
    猜你喜欢
    • 2013-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-30
    • 2020-08-17
    • 1970-01-01
    • 2011-11-29
    • 2011-07-07
    相关资源
    最近更新 更多