Приемник Django-сигнала не работает, хотя подключен в методе ready()

Я новичок в Django, возможно, мой вопрос имеет простой ответ, но я в тупике. Мой сигнальный код живет в signals.py, Я использую @receiver, Согласно документации, я импортировал субмодуль сигнала внутри ready() в apps.py, Но это не работает =(Кто-нибудь может мне помочь?

NB Если я напишу свой код сигнала внутри 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',
    ...,
]

1 ответ

Решение

Как объясняется в FineManual, вам нужно либо явно зарегистрировать appconfig в INSTALLED_APPS то есть:

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

или объявить это как default_app_config в products/__init__.py:

# products/__init__.py
default_app_config = "products.apps.ProductConfig"
Другие вопросы по тегам