【问题标题】:trying to submit a view and getting 405 error尝试提交视图并收到 405 错误
【发布时间】:2020-08-17 10:14:50
【问题描述】:

我正在尝试在用户配置文件中实施评论部分,但是当我尝试提交评论时,即使我在管理面板中创建评论时它仍会正常显示在配置文件中,但我仍然收到此 405 错误。如果你能帮忙的话。

提前致谢

代码:

型号

class Review(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    expert = models.ForeignKey(Expert, on_delete=models.CASCADE)
    timestamp = models.DateTimeField(auto_now_add=True)
    content = models.TextField()

表格

class ReviewForm(forms.ModelForm):
    content = forms.CharField(widget=forms.Textarea(attrs={
    'rows':3,
    }))
    class Meta:
        model = Review
        fields = ('content',)

查看

class ExpertDetailView(DetailView):
    model = Expert

    def expert(self, *args, **kwargs):
        form = ReviewForm(self.request.POST)
        if form.is_valid():
            expert = self.get_object()
            review = form.instance
            review.user = self.request.user
            review.expert = expert
            review.save()
            print ('worked')

        print ('worked')

    def get_object(self, **kwargs):
        object = super().get_object(**kwargs)
        return object

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context.update({
            'form': ReviewForm()
        })
        return context

最后是模板

<h4>Leave a comment below</h4>
      <form method='POST'>
          {% csrf_token %}
          {{ form|crispy}}
          <br>
          <button class='btn btn-primary' type='submit'>review</button>
      </form>
      <hr />
      <h5>Comments</h5>
      {% for review in object.reviews %}
          <div>
              <p>{{ review.content }}
              <br />
              <small>{{ review.timestamp|timesince }} ago</small>
          </div>
          <hr />
      {% endfor %}

【问题讨论】:

  • 你能贴出 django 返回的错误吗?

标签: python django http-status-code-405


【解决方案1】:

405 表示方法不被允许。这是有道理的,因为你没有写def post(request, *args, **kwargs),而DetailView 默认只会写

话虽如此,自己实现所有逻辑可能不是一个好主意。您可以让ModelFormMixin 已经让您完成大部分工作:

from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic.edit import ModelFormMixin

class ExpertDetailView(LoginRequiredMixin, ModelFormMixin, DetailView):
    model = Expert
    form_class = ReviewForm
    success_url = 'some-url'

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

    def form_valid(self, form):
        review = form.instance
        review.user = self.request.user
        review.expert = self.object
        form.save()
        return super().form_valid(form)

注意:您可以将视图限制为基于类的视图,以向经过身份验证的用户提供 LoginRequiredMixin mixin [Django-doc].

【讨论】:

  • 非常感谢您的帮助。如果你能帮我做一件额外的事情。我得到的专家没有定义,最有可能在 form_valid 函数部分。如果你能帮我在这种情况下定义专家。
  • @Talal:啊,那应该是self.object
猜你喜欢
  • 1970-01-01
  • 2020-10-20
  • 2018-01-18
  • 2021-12-15
  • 2018-08-16
  • 1970-01-01
  • 2021-03-20
  • 1970-01-01
  • 2020-07-16
相关资源
最近更新 更多