不幸的是,这根本没有意义。
首先,这不能是一个方法,因为它没有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)