如何在Django中使用Post_save

时间:2010-11-18 12:22:47

标签: python django django-models django-comments

我正在尝试使用Django评论框架在用户的个人资料提交评论后添加点数。我想我需要使用post_save,但我不确定是否完全诚实。

以下是我的models.py中的方法:

 def add_points(request, Comment):
    if Comment.post_save():
        request.user.get_profile().points += 2
        request.user.get_profile().save()

从我发现的post_save的例子来看,这远远不是显示的内容 - 所以我认为我的观点不合时宜。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

不幸的是,这完全没有意义。

首先,这不是一种方法,因为它没有self作为第一个参数。

其次,它似乎是在上课,而不是实例。您无法保存类本身,只能保存它的实例。

第三,post_save不是模型的方法(除非你自己定义了一个)。这是一个信号,你不会调用信号,你可以附加一个信号处理程序并在那里做逻辑。您也无法将信号中的数据返回给方法。

最后,您添加2的配置文件实例不一定与您在第二行中保存的配置文件实例相同,因为Django模型实例没有标识。获取一次并将其放入变量中,然后保存。

评论框架定义了its own signals,您可以使用它而不是通用的post_save。所以,你真正需要的是在comment_was_posted上注册一个信号处理程序。在该处理程序中,您需要获取用户的个人资料,然后更新。

def comment_handler(sender, comment, request, **kwargs):
    profile = request.user.get_profile()
    profile.points += 2
    profile.save()

from django.contrib.comments.signals import comment_was_posted
comment_was_posted.connect(comment_handler, sender=Comment)