2010-11-18 52 views
0

我想在使用Django评论框架提交评论后为用户的个人资料添加点。我想我需要使用post_save,但不一定非常诚实。如何在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的例子,这是远远显示什么 - 所以我想我的路要走标记。

谢谢你的帮助。

回答

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) 
+0

是的,我的方式不合适......我用你发布的内容,并得到一个AssertionError:信号接收器必须是可调用的。它看起来像这篇文章有相同的错误:http://stackoverflow.com/questions/2310676/django-signal-via-decorator-on-model-method – Emile 2010-11-18 15:06:01

+0

对不起,连接调用错误的方式:编辑,尝试它现在。 – 2010-11-18 15:45:17

+0

谢谢,它现在不会抛出错误,但仍然不会更新get_profile()。points。我不确定它是否被调用。还有其他建议吗?再次感谢您的帮助。 – Emile 2010-11-18 16:14:55