0

我正在尝试在用户提交评论后向用户的个人资料添加积分 - 使用 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 示例来看,这与显示的内容相去甚远——所以我认为我离题了。

感谢您的帮助。

4

1 回答 1

2

不幸的是,这根本没有意义。

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

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

第三,post_save不是模型的方法(除非您自己定义了一个)。这是一个信号,你不调用信号,你将一个信号处理程序附加到它并在那里执行逻辑。您也不能将数据从信号返回到方法。

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

Comments 框架定义了自己的信号,您可以使用这些信号代替通用的 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)
于 2010-11-18T13:19:02.503 回答