python - 尽管已在 ready() 方法中连接,但 Django 信号接收器不起作用

标签 python django django-signals

我是 Django 的新手,也许我的问题有一个简单的答案,但我陷入了僵局。 我的信号代码位于 signals.py 中,我使用 @receiver。根据文档,我在 apps.py 的 ready() 中导入了信号子模块。但它不起作用=(有人可以帮助我吗?

注意如果我在 models.py 中编写信号代码,一切正常。

代码: 信号.py

from django.db.models.signals import post_delete
from django.dispatch import receiver
import os
from .models import ProductImage

def delete_image_from_storage(path):
  if os.path.isfile(path):
     print(path)
     os.remove(path)


@receiver(post_delete, sender=ProductImage)
def post_delete_image(sender, instance, **kawargs):
  if instance.photo:
      print(instance.photo.path)
      delete_image_from_storage(instance.photo.path)

apps.py

from django.apps import AppConfig


class ProductsConfig(AppConfig):
  name = 'products'

  def ready():
      import products.signals

settings.py

INSTALLED_APPS = [
    ...,
    'products',
    ...,
]

最佳答案

As explained in the FineManual ,您需要在 INSTALLED_APPS 中显式注册 appconfig 即:

INSTALLED_APPS = [
    ...,
    'products.apps.ProductConfig',
    ...,
]

或者在products/__init__.py中声明为default_app_config:

# products/__init__.py
default_app_config = "products.apps.ProductConfig"

关于python - 尽管已在 ready() 方法中连接,但 Django 信号接收器不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47790412/

相关文章:

python - Flask, flask 登录 - 我不明白

django - 如何在 Azure Kubernetes 服务上向公众隐藏 Django Admin,同时通过后门保持访问

django - 无法导入 Celery 模块

python - Django 在不同的模型字段上保存图像

Python:获取不同的时间格式

python - 将数组与文件进行比较,并根据数组元素形成组

python - Tensorflow InvalidArgumentError : 2 root error(s) found. 索引 [28,0] = 11292 不在 [0, 11272)

python - 通过中介模型在 django 中创建与 AUTH_USER_MODEL 的多对多关系

python - Django多个多对多和post_save处理

python - Django 监听器听不到信号