【问题标题】:Method Not Allowed (POST): /experience/create-review/不允许的方法(POST):/experience/create-review/
【发布时间】:2020-07-21 11:32:09
【问题描述】:

我正在尝试创建一个视图,以便在我的 Django 应用程序中为特定产品添加评论,但我不断收到 405 错误 Method Not Allowed

我们中的 2 个人试图解决这个问题,但无法实现任何目标..

这是我们迄今为止一直在尝试的:

模型.py;

class Review(models.Model):
  user = models.ForeignKey(UserProfile)

  product = models.ForeignKey(Product)

  review = models.TextField()
  is_positive = models.BooleanField()

  timestamp = models.DateTimeField(auto_now_add=True)


  class Meta:
      unique_together = (('user', 'product'),)

  def __str__(self):
      return '{}'.format(self.review)

Views.py;

class ReviewCreate(LoginRequiredMixin, UserOnlyMixin, CreateView):
model = Review
fields = ['user', 'product', 'review', 'is_positive']
template = "product.html"

def get_success_url(self):
    kwargs = {'slug': self.object.product.slug}
    url = reverse_lazy("experience", kwargs=kwargs)
    return url

Urls.py(未找到重复项);

url(r'^experience/(?P<slug>[\w-]+)/$', ProductView.as_view(), name='experience'),
url(r'^experience/create-review/$', ReviewCreate.as_view(), name='add-review'),
url(r'^reservation/(?P<slug>[\w-]+)/$', BookingView.as_view(), name='booking'),

在模板product.html中;

<form action="{% url 'add-review' %}" class="writearev-form" method="post">
    {% csrf_token %}
    <input type="hidden" name="product" value="{{ object.pk }}">
    <input type="hidden" name="user" value="{{ user.userprofile.pk }}">
    <label class="control control--radio control-one">
       <input value="true" id="chkTrue" type="radio" name="is_positive">Avis positif
       <div class="control__indicator"></div>
    </label>
    <label class="control control--radio control-two">
       <input value="false" id="chkFalse" type="radio" name="is_positive">Avis négatif
       <div class="control__indicator"></div>
    </label>
    <textarea name="review" for="writearev-label" type="textarea" class="input-writearev" placeholder="Rédiger votre avis.."></textarea>
    <button type="submit" class="btn-writearev">Publier</button>
 </form>

如何解决这个问题?

请帮忙

【问题讨论】:

    标签: python html django django-models django-views


    【解决方案1】:

    add-review 视图必须放在 experience 的顶部。在您的情况下,create-review 将与 [\w-]+ 匹配,并且 Django 将尝试向 experience 视图发送 POST 请求。

    url(r'^experience/create-review/$', ReviewCreate.as_view(), name='add-review'),
    url(r'^experience/(?P<slug>[\w-]+)/$', ProductView.as_view(), name='experience'),
    url(r'^reservation/(?P<slug>[\w-]+)/$', experienceBookingView.as_view(), name='booking'),
    

    【讨论】:

      猜你喜欢
      • 2022-01-23
      • 1970-01-01
      • 2020-06-17
      • 2014-05-23
      • 1970-01-01
      • 2021-02-09
      • 2020-11-13
      • 2020-06-18
      • 2017-09-17
      相关资源
      最近更新 更多