【问题标题】:TypeError at /post/3/comment/ 'dict' object is not callable/post/3/comment/'dict' 对象的 TypeError 不可调用
【发布时间】:2019-08-09 19:37:53
【问题描述】:
class Comment(models.Model):
    post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name='comments')
    author = models.CharField(max_length=200)
    text = models.TextField()
    image = models.ImageField(upload_to='Comment_Pictures', blank=True)
    date_posted = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return self.text

    def get_absolute_url(self):
        return '/'


class CommentAddView(LoginRequiredMixin, CreateView):
    model = Comment
    fields = ['text', 'image']

    def form_valid(self, form):
        form.instance.author = self.request.user
        form.instance.post = Post.objects.get(id=self.kwargs['pk'])
        return super().form_valid(form)

class CommentDeleteView(LoginRequiredMixin, UserPassesTestMixin, DeleteView):
    model = Comment
    success_url = '/'

    def test_func(self):
        comment = self.get_object()
        if request.user == comment.author:
            return True
        return False

/post/3/comment/ 'dict' 对象的 TypeError 不可调用请求 方法:POST 请求地址:http://localhost:8000/post/3/comment/Django 版本:2.1.7 异常类型:TypeError 异常值:'dict' 对象不可调用

【问题讨论】:

    标签: python django


    【解决方案1】:

    该错误准确地告诉您出了什么问题。 self.kwargs 是一个字典,但你正在调用它。

    你的意思可能是:

    data = Post.objects.get(id=self.kwargs['pk'])
    

    【讨论】:

    • 对不起,发布了我的代码的先前版本。更新了可以查一下吗。
    • 好吧,新代码没有给出那个错误。现在是什么错误?请发布完整的回溯。
    【解决方案2】:

    你也可以试试这个:

    form.instance.post = Post.objects.get(id=self.kwargs.get('pk'))
    

    【讨论】:

    • 对于 CommentDeleteView 如何设置 test_func () 以访问特定帖子并从帖子模型中永久删除该帖子中的评论。如果我在 test_func() 中返回 True 而没有任何条件它通过删除功能。但是该评论出现在页面中,当我尝试再次删除它时,它给出了页面 404 错误。(在帖子中更新了 DeleteView)
    猜你喜欢
    • 2011-10-01
    • 2012-10-31
    • 2019-02-27
    • 2017-05-27
    • 2016-03-07
    • 2019-08-10
    • 1970-01-01
    • 2020-09-03
    相关资源
    最近更新 更多