[英]How to use Post_save in Django
我在尝试使用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的示例中,这与所显示的相去甚远-所以我认为我远远没有实现。
谢谢您的帮助。
不幸的是,这根本没有任何意义。
首先,这不是一种方法,因为它没有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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.