大家好,当我发布评论时,我得到了这个错误,虽然评论正在发布,但它给了我这个错误,不去任何重定向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,并且可以传入创建的实例的段塞。