【问题标题】:How to redirect to post detail page after deleting a comment in Django?在 Django 中删除评论后如何重定向到帖子详细信息页面?
【发布时间】:2020-06-19 11:25:20
【问题描述】:

谁能帮帮我。

我想在删除给定 pk 的评论后重定向到帖子详细信息页面。 当我点击评论删除按钮时,我得到了一个 AttributeError 。 错误:函数对象没有“格式”属性

如果我将评论删除视图的success_url 更改为重定向到不带参数的帖子列表页面,它运行良好,但这不是我想要的。删除评论后,我需要将用户重定向到发布详细信息页面。

这是我的帖子模型

class Post(models.Model):
    STATUS_CHOICES = (
        ('draft', 'Draft'),
        ('published', 'Published'),
    )
    title = models.CharField(max_length=250)
    slug = models.SlugField(max_length=250, unique_for_date='publish')
    author = models.ForeignKey(get_user_model(), on_delete=models.CASCADE, related_name='blog_posts')
    body = models.TextField()
    publish = models.DateTimeField(default=timezone.now)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    status = models.CharField(max_length=10, choices=STATUS_CHOICES, default='published')
    objects = models.Manager()
    published = PublishedManager()
    tags = TaggableManager()

    class Meta:
        ordering = ('-publish',)

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('post_detail', args=[self.pk, self.slug])

    def save(self, *args, **kwargs):
        self.slug = slugify(self.title)
        super().save(*args, **kwargs)'''

评论模型

class Comment(models.Model):
    post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name='comments')
    author = models.ForeignKey(get_user_model(), on_delete=models.CASCADE,)
    comment = models.TextField()   
    created = models.DateTimeField(auto_now_add=True)  
    updated = models.DateTimeField(auto_now=True)    
    active = models.BooleanField(default=True)

    class Meta:
        ordering = ('created',)

    def __str__(self):
        return f'Comment by {self.author} on {self.post}'
    
    def get_absolute_url(self):
        return self.post.get_absolute_url() + f'#comment-{self.pk}'

评论删除视图

class CommentDeleteView(DeleteView):
    model = Comment
    template_name = 'comment_delete.html'

    def success_url(self):
        post = Post.objects.get(pk=self.object.post.pk)
        return post.get_absolute_url()

以及完整的错误

Internal Server Error: /blog/13/comment_delete/
Traceback (most recent call last):
  File "C:\Users\SUNNY\blog_folder\ven\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
  File "C:\Users\SUNNY\blog_folder\ven\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\Users\SUNNY\blog_folder\ven\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\SUNNY\blog_folder\ven\lib\site-packages\django\views\generic\base.py", line 71, in view
    return self.dispatch(request, *args, **kwargs)
  File "C:\Users\SUNNY\blog_folder\ven\lib\site-packages\django\views\generic\base.py", line 97, in dispatch
    return handler(request, *args, **kwargs)
  File "C:\Users\SUNNY\blog_folder\ven\lib\site-packages\django\views\generic\edit.py", line 218, in post
    return self.delete(request, *args, **kwargs)
  File "C:\Users\SUNNY\blog_folder\ven\lib\site-packages\django\views\generic\edit.py", line 212, in delete
    success_url = self.get_success_url()
  File "C:\Users\SUNNY\blog_folder\ven\lib\site-packages\django\views\generic\edit.py", line 222, in get_success_url
    return self.success_url.format(**self.object.__dict__)
AttributeError: 'function' object has no attribute 'format'
[19/Jun/2020 11:50:28] "POST /blog/13/comment_delete/ HTTP/1.1" 500 88418

【问题讨论】:

    标签: django


    【解决方案1】:

    要配置 DeleteView 成功 URL,您必须覆盖方法 get_success_url()。看到您实现成功 URL 的方法与该名称不匹配,相反,它的超类正在尝试访问默认 get_success_url() 中的 success_url 属性,从而给您该错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-25
      • 1970-01-01
      • 1970-01-01
      • 2018-03-26
      • 2012-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多