反转'detail',未找到任何参数。尝试了 1 种模式: ['产品/(?P<slug>[-a-zA-Z0-9_]+)$']



大家好,当我发布评论时,我得到了这个错误,虽然评论正在发布,但它给了我这个错误,不去任何重定向URL我的views.py文件是:

class CommentCreateView(CreateView):
model = Comment
form_class = CommentForm
template_name = 'add-comment.html'
# fields = '__all__'
def form_valid(self, form):
form.instance.product = Product.objects.get(slug=self.kwargs['slug'])
return super().form_valid(form)
success_url = reverse_lazy('products:detail')

my urls.py is:

urlpatterns = [
path('' , ProductListView.as_view(), name= "list"),
path('new/' , ProductCreateView.as_view() , name="product-create"),
path('<slug:slug>/update/' , ProductUpdateView.as_view() , name="product-update"),
path('<slug:slug>/delete/' , ProductDeleteView.as_view() , name="product-delete"),

path('<slug:slug>/comment' , CommentCreateView.as_view() , name="add-comment"),
path('<slug:slug>' , ProductDetailSlugView.as_view() , name="detail"),

]

我的models.py文件是:

class Comment(models.Model):
product=models.ForeignKey(Product , related_name="comments", on_delete=models.CASCADE)
name = models.CharField(max_length=255)
body=models.TextField()
date_added = models.DateTimeField(auto_now_add=True)
# def get_absolute_url(self):
#     return reverse("products:detail", kwargs={"slug" : self.slug})
def __str__(self):
return '%s - %s'%(self.product.title, self.name)

我的add-comment.html是:

{% extends "base.html"%}
{% load crispy_forms_tags%}
{% block content %}
<h2 class="text-center">comment here...</h2>
<div class="col-md-6 offset-md-3">
<form method="POST">
{% csrf_token %}
<fieldset class="form-group">
{{form|crispy}}
</fieldset>

<button class="btn btn-secondary" >Add comment</button>
</form>

,当我点击添加评论,它是添加评论,但不重定向到该页。错误是:在这里输入图像描述

您正在尝试重定向到success_url = reverse_lazy('products:detail'),但没有任何参数(例如一个slug)。

你应该使用:

class CommentCreateView(CreateView):
model = Comment
form_class = CommentForm
template_name = 'add-comment.html'
def form_valid(self, form):
form.instance.product = Product.objects.get(slug=self.kwargs['slug'])
return super().form_valid(form)
def get_success_url(self):
return reverse('detail', kwargs={'slug' : self.object.slug})

在这里,您可以通过get_success_url获得url,并且可以传入创建的实例的段塞。

最新更新