我正在尝试为网站上的商品创建一个评论系统。
为了做到这一点,我创建了2个模型,一个用于项目(节日),另一个用于评论。该项目是评论的外键。
我想做的是在URL中传递项目的PK,并将其设置为审阅的外键。
我目前收到此错误:
NoReverseMatch位于/ festivals / 55 /
找不到参数'(55,)'的'create_review'。尝试了1种模式:['festivals / create / review / $']
我花了很长时间试图解决这个问题:/
Views.py:
class CreateReview(LoginRequiredMixin, SelectRelatedMixin, generic.CreateView):
form_class = forms.ReviewFormCreate
model = models.Review
template_name = 'festival_list/review_form.html'
success_url = '/'
def form_valid(self, form):
self.object = form.save(commit=False)
self.object.user = self.request.user
self.object.save()
form.instance.festival = get_object_or_404(models.Festival, pk=self.kwargs['pk'])
return super(CreateReview, self).form_valid(form)
urls.py
path('create/review/<int:pk>',views.CreateReview.as_view(),name='create_review'),
模型
类评论(models.Model):
user = models.ForeignKey(
User,
related_name='Reviews',
on_delete=models.CASCADE,
)
festival = models.ForeignKey(
Festival,
related_name='Festival_Reviews',
on_delete=models.CASCADE
)
模板链接:
<a class="btn btn-success" href="{% url 'festival_list:create_review' festival.pk %}">Add Review</a>
非常感谢您的帮助=]
答案 0 :(得分:0)
您需要在url中添加主键,例如:
path(
'create/review/<int:pk>',
views.CreateReview.as_view(),
name='create_review'
),
因此,将派生的URL看起来像create/review/123
,其中123
是节日的主键。
评论的网址应如下所示:
<a class="btn btn-success" href="{% url 'festival_list:create_review' pk=festival.pk %}">Add Review</a>
话虽如此,您的Form
可能不会接受此消息,因为节日没有填写,因此您应该删除该节日:
class CreateReview(LoginRequiredMixin, SelectRelatedMixin, generic.CreateView):
form_class = forms.ReviewFormCreate
model = models.Review
template_name = 'festival_list/review_form.html'
success_url = '/'
def create_form(self, *args, **kwargs):
form = super(CreateReview, self).create_form(*args, **kwargs)
form.instance.user = self.request.user
form.instance.festival_id = self.kwargs['pk']
return form
,因此从表单本身中删除了festival
和user
(您可能不希望用户篡改它,因为否则人们可以像其他用户一样发表评论)。 / p>
答案 1 :(得分:-1)
我遇到了同样的问题,因为我在表单页面中再次使用了该URL。 像这样:
<form
action="{% url 'readersclub_review_create_urlpattern'}"
method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Submit Review</button>
</form>
但是我不知道如何解决它。