Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当放置在models.py之外时,Django信号不工作_Python_Django_Django Models_Signals_Django Signals - Fatal编程技术网

Python 当放置在models.py之外时,Django信号不工作

Python 当放置在models.py之外时,Django信号不工作,python,django,django-models,signals,django-signals,Python,Django,Django Models,Signals,Django Signals,我试图在应用程序中的Django模型保存后打印一些文本 我已经在同一应用程序的signals.py文件中为此创建了一个信号 但是,它没有按预期工作(即,没有调用函数,也没有打印文本) 但是,如果我将receiver函数放在models.py文件中,就在我创建的模型的正下方,它就可以正常工作(即调用函数并打印文本) 我已经阅读了文档,检查是否需要将信号放在特定的文件或位置。看起来没有这样的限制 如果没有这样的限制,为什么行为会有所不同 信号。py: from django.db.models.s

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

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

但是,它没有按预期工作(即,没有调用函数,也没有打印文本)

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

我已经阅读了文档,检查是否需要将信号放在特定的文件或位置。看起来没有这样的限制

如果没有这样的限制,为什么行为会有所不同

信号。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")
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
型号。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")
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
  • 在已安装的应用程序中,您应按以下方式注册:
  • 'post.apps.PostConfig'

    即在settings.py中替换

    INSTALLED_APPS = (
     '...',
     'post,
    )
    

  • 在apps.py中,您应该添加以下内容:
  • 在应用的文件夹中创建了一个文件
  • # 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()