繁体   English   中英

如何在Django中使用Post_save

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM