Django get_absolute_url() 似乎在评论部分不起作用
Django get_absolute_url() doesn't seem to work in comment section
我试图让我的用户在发表评论后进入文章页面,但缺少一些东西。
class Comment(models.Model):
post = models.ForeignKey(Post, related_name="comments" ,on_delete=models.CASCADE)
name = models.CharField(max_length=30)
body = RichTextUploadingField(extra_plugins=
['youtube', 'codesnippet'], external_plugin_resources= [('youtube','/static/ckeditor/youtube/','plugin.js'), ('codesnippet','/static/ckeditor/codesnippet/','plugin.js')])
date_added = models.DateTimeField(auto_now_add=True)
def __str__(self):
return '%s - %s' % (self.post.title, self.name)
class Meta:
verbose_name = "comentario"
verbose_name_plural = "comentarios"
ordering = ['date_added']
def get_absolute_url(self):
return reverse('article-detail', kwargs={'pk': self.pk})
urls.py
path('article/<int:pk>/comment/', AddCommentView.as_view(), name='add_comment'),
path('article/<int:pk>', ArticleDetailView.as_view(), name="article-detail"),
path('article/edit/<int:pk>', UpdatePostView.as_view(), name='update_post'),
path('article/<int:pk>/remove', DeletePostView.as_view(), name='delete_post'),
对于 update_post,get_absolute_url() 有效。提前致谢。
您需要传递一个属于 ArticleDetailView 模型的参数。例如,如果 ArticleDetailView 的模型是 Post:
class ArticleDetailView(DetailView):
model = Post
get_absolute_url应该使用post.pk:
class评论(models.Model):
....
....
def get_absolute_url(self):
return reverse('article-detail', kwargs={'pk': self.post.pk})
在您的情况下,它无法正常工作,因为它在文章 (Post) 视图中使用评论 pk
好的,我正在使用这个 class 进行评论,不得不删除 success_url 的功能,现在可以使用了。
class AddCommentView(CreateView):
model = Comment
form_class = CommentForm
#form_class = PostForm
template_name = 'add_comment.html'
success_url = reverse_lazy('home')
def form_valid(self,form):
form.instance.post_id = self.kwargs['pk']
return super().form_valid(form)
我试图让我的用户在发表评论后进入文章页面,但缺少一些东西。
class Comment(models.Model):
post = models.ForeignKey(Post, related_name="comments" ,on_delete=models.CASCADE)
name = models.CharField(max_length=30)
body = RichTextUploadingField(extra_plugins=
['youtube', 'codesnippet'], external_plugin_resources= [('youtube','/static/ckeditor/youtube/','plugin.js'), ('codesnippet','/static/ckeditor/codesnippet/','plugin.js')])
date_added = models.DateTimeField(auto_now_add=True)
def __str__(self):
return '%s - %s' % (self.post.title, self.name)
class Meta:
verbose_name = "comentario"
verbose_name_plural = "comentarios"
ordering = ['date_added']
def get_absolute_url(self):
return reverse('article-detail', kwargs={'pk': self.pk})
urls.py
path('article/<int:pk>/comment/', AddCommentView.as_view(), name='add_comment'),
path('article/<int:pk>', ArticleDetailView.as_view(), name="article-detail"),
path('article/edit/<int:pk>', UpdatePostView.as_view(), name='update_post'),
path('article/<int:pk>/remove', DeletePostView.as_view(), name='delete_post'),
对于 update_post,get_absolute_url() 有效。提前致谢。
您需要传递一个属于 ArticleDetailView 模型的参数。例如,如果 ArticleDetailView 的模型是 Post:
class ArticleDetailView(DetailView):
model = Post
get_absolute_url应该使用post.pk:
class评论(models.Model):
....
....
def get_absolute_url(self):
return reverse('article-detail', kwargs={'pk': self.post.pk})
在您的情况下,它无法正常工作,因为它在文章 (Post) 视图中使用评论 pk
好的,我正在使用这个 class 进行评论,不得不删除 success_url 的功能,现在可以使用了。
class AddCommentView(CreateView):
model = Comment
form_class = CommentForm
#form_class = PostForm
template_name = 'add_comment.html'
success_url = reverse_lazy('home')
def form_valid(self,form):
form.instance.post_id = self.kwargs['pk']
return super().form_valid(form)