Django发出如何正确连接发送者和接收者的信号

4uqofj5v  于 2023-05-19  发布在  Go
关注(0)|答案(1)|浏览(138)

我在尝试使用Django信号时遇到了问题。我有一个项目与以下结构

authexample
manage.py 
posts #django app 
func.py #here is sender and receiver logic is realised

在posts应用程序的models.py中,我创建了一个简单的post模型

class Post(models.Model):
     title = models.CharField(max_length=30)
     body = models.CharField(max_length=50)

在我的func.py中,它位于post应用程序之外,我通过以下代码实现了我的信号调用逻辑

from django.db.models import models
from posts.models import Post 
from django.db.models.signals import post_save 
from django.dispatch import receiver 

#my sender function  
def func_sender(title,body):
    a = Post(title=title,body=body)
    a.save()

#receiver function 
@receiver(post_save, sender=func_sender)
def func_receiver(sender,**kwargs):
    print("article was saved")

比我试图创建测试文章,为此目的,我运行

python manage.py shell 
from func import * 
a = Post("test_title","test_body)

当这段代码被执行时,我的测试文章被创建,但我希望在文章创建后,我的接收器函数func_receiver将执行并提示我打印语句中的字符串。为什么这不会发生。请指引我

gzszwxb4

gzszwxb41#

Google搜索后,我找到了解决方案。我的问题是,当我在sender关键字参数中调用receiver时,我指定了func_sender,但正确的方法是指定模型Post本身。这是我的解决方案

@receiver(post_save,sender=Post)
 def func_receiver(sender,**kwargs):
      print("post was saved)

相关问题