我在尝试播放django信号时遇到了问题。我有一个具有以下结构的项目
authexample
manage.py
posts #django app
func.py #here is sender and receiver logic is realised
在帖子应用程序的models.py中,我创建了一个简单的帖子模型
class Post(models.Model):
title = models.CharField(max_length=30)
body = models.CharField(max_length=50)
在我位于post app外部的func.py
中,我通过以下代码实现了我的信号调用逻辑
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):打印(“文章已保存”)
比起我,我试图为此目的创建测试文章
python manage.py shell
from func import *
a = Post("test_title","test_body)
执行此代码后,创建了我的测试文章,但我希望在创建文章后,我的接收器函数func_receiver
将执行并在打印语句中提示我字符串。为什么不会发生这种情况。请引导我
谷歌搜索后,我找到了解决方案。我的问题是因为当我在sender关键字参数中调用接收器时,我指定了func_sender
,但正确的方法是指定了模型Post本身。这是我的解决方案
@receiver(post_save,sender=Post)
def func_receiver(sender,**kwargs):
print("post was saved)