[Django放置在模型外部时信号不起作用。py

问题描述 投票:0回答:1

[我正在尝试保存应用程序中的Django模型后打印一些文本。

我已经在同一应用程序的signals.py文件中为此创建了一个信号。

但是,它不能按预期方式工作(即,未调用函数且未打印文本)

但是如果我将接收器函数放在我创建的模型下面的models.py文件中,它就可以正常工作(即,正在调用该函数并且已打印文本)

我已经仔细阅读了文档,以检查是否有必要将信号放置在特定的文件或位置。似乎没有任何此类限制。

https://docs.djangoproject.com/en/3.0/topics/signals/#django.dispatch.receiver

如果没有这样的限制,为什么行为方式不同?

signals.py:

from django.db.models.signals import post_save
from django.dispatch import receiver
from aws_envs.models import UserStack

@receiver(post_save, sender=UserStack)
def create_user_stack(sender, **kwargs):
    print("creating user stack now")

models.py:

class UserStack(BaseModel):

    name = models.CharField(max_length=50)
    email = models.EmailField(unique=True, max_length=50, blank=False)
    enabled = models.BooleanField(default=True)

    def save(self, *args, **kwargs):
        print(f"Creating stack with data: {self.name, self.email}")
        super(UserStack, self).save(*args, **kwargs)

    def __str__(self):
        return self.name, self.email
python django django-models signals django-signals
1个回答
0
投票
  1. 在INSTALLED_APPS中,您应该这样注册:

''post.apps.PostConfig'

  1. 在apps.py中,您应该添加以下内容:
from django.apps import AppConfig

class postConfig(AppConfig):
    name = 'post'

    def ready(self):
        # signals are imported, so that they are defined and can be used
        import post.signals
  1. 在应用程序的文件夹中创建了文件
# post/signals.py
from django.dispatch import receiver
from django.db.models.signals import post_save
from post.models import Post

def send():
    print("send email!")

@receiver(post_save, sender=Post, dispatch_uid='Post_post_save')
def send_email(instance, **kwargs):
    send()
© www.soinside.com 2019 - 2024. All rights reserved.