Приемник 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"