我正在尝试使用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的例子来看,这远远不是显示的内容 - 所以我认为我的观点不合时宜。
感谢您的帮助。
答案 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)