Django 信号接收器虽然连接在 ready() 方法中但不起作用



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

n.b。如果我在models.py中写下信号代码,则一切正常。

代码: signal.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',
    ...,
]

如《终结》中所述,您需要在INSTALLED_APPS IE中明确注册AppConfig:

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

或将其声明为products/__init__.py中的default_app_config

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

最新更新