【问题标题】:Why is my SIGNAL not working in Django - what I'm doing wrong?为什么我的 SIGNAL 不能在 Django 中工作——我做错了什么?
【发布时间】:2020-11-03 16:27:23
【问题描述】:

首先,我不是开发人员。

尝试使用 Django(版本 3.1.2)构建应用程序,但遇到一些信号问题。

我的models.py 中有这个模型:

class PhoneNumbers(models.Model):
    number = models.CharField(_('Category'), max_length=255)
    created = models.DateTimeField(_('Created'), auto_now_add=True, blank=True)
    uuid = models.UUIDField(default=uuid.uuid4, editable=False, unique=True)

还有一个模特Persons

class Persons(models.Model):
    name = models.CharField(_('Name'), max_length=255)
    number = models.CharField(_(Number), max_length=255)
    ...

signals.py里的代码:

from django.db.models.signals import pre_save, post_delete, post_save
from django.dispatch import receiver
from .models import PhoneNumbers, Persons

@receiver(post_save, sender=Persons)
def save_contract(instance, sender, created, **kwargs):
    print("Request finished!")

当我保存一个人时,我希望在控制台输出中得到一个 PRINT,但什么也得不到。怎么了?

我也加了__init__.py:

default_app_config = 'myapp.apps.MyAppConfig'

我的 apps.py 看起来像:

from django.apps import AppConfig


class MyAppConfig(AppConfig):
    name = 'myapp'

【问题讨论】:

    标签: python django django-signals


    【解决方案1】:

    您没有加载信号模块。你可以在MyAppConfig

    from django.apps import AppConfig
    
    
    class MyAppConfig(AppConfig):
        name = 'myapp'
    
        def ready(self):
            import apps.signals  # noqa

    【讨论】:

    • 嗨@Willem Van Onsem,感谢您提供代码,但仍然无法正常工作。我应该手动安装任何模块吗? import apps.signals # noqa ModuleNotFoundError: No module named 'apps'import signals # noqa ModuleNotFoundError: No module named 'signals'
    • @sokolata:你把signals.py 文件保存在哪里?这应该在您的应用程序的目录中。如果应用程序有不同的名称,那么当然你导入import my_app_name.signals,所以它应该是你定义信号的应用程序的signals 模块。
    【解决方案2】:

    此外,信号不适用于批量更新。

    【讨论】:

    • 请在您的回答中提供更多详细信息。正如目前所写的那样,很难理解您的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-05
    • 1970-01-01
    • 1970-01-01
    • 2017-09-29
    • 2021-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多