不幸的是,这根本没有意义。
首先,这不可能是一种方法,因为它没有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)
是的,我的方式不合适......我用你发布的内容,并得到一个AssertionError:信号接收器必须是可调用的。它看起来像这篇文章有相同的错误:http://stackoverflow.com/questions/2310676/django-signal-via-decorator-on-model-method – Emile 2010-11-18 15:06:01
对不起,连接调用错误的方式:编辑,尝试它现在。 – 2010-11-18 15:45:17
谢谢,它现在不会抛出错误,但仍然不会更新get_profile()。points。我不确定它是否被调用。还有其他建议吗?再次感谢您的帮助。 – Emile 2010-11-18 16:14:55