关于python:如何在Django中使用Post_save

How to use Post_save in Django

我试图在用户提交评论后,使用django评论框架向他们的个人资料添加点。我想我需要使用后保存,但不一定要完全诚实。

以下是我在models.py中的方法:

1
2
3
4
 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。所以,你真正需要的是在评论上注册一个信号处理程序。在这个处理程序中,您需要获取用户的配置文件,并对其进行更新。

1
2
3
4
5
6
7
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)