我正在尝试为某个模型上创建新的hook
时创建一个save()
,并且由于以下原因,我不理解receiver
方法不会被调用:装饰的方法在另一个文件中。
我有一个名为Pizza
的类,我想使用pre_save
中的django.db.models.signals
方法在保存内容之前执行操作
# models.py file
class Pizza(models.Model):
name = models.CharField(max_length=200)
# actions.py file
from .models import Pizza
from django.db.models.signals import pre_save
from django.dispatch import receiver
@receiver(pre_save, sender=Pizza)
def before_action(instance, **kwargs):
logger.info("Before action method was called.")
除非我将方法before_action
放在Pizza
模型中,否则上面的代码将不起作用:
# models.py file
from django.db.models.signals import pre_save
from django.dispatch import receiver
class Pizza(models.Model):
name = models.CharField(max_length=200)
@receiver(pre_save, sender=Pizza)
def before_action(instance, **kwargs):
logger.info("Before action method was called.")
如何在每个文件上划分这2个职责?我想将所有操作保存在单独的文件中
我也尝试遵循此答案,但没有成功:https://stackoverflow.com/a/8022315/2336081
答案 0 :(得分:1)
您似乎需要导入信号。
my_app / apps.py
from django.apps import AppConfig
class MyAppConfig(AppConfig):
name = 'my_app'
def ready(self):
import my_app.signals
my_app / __ init __。py
default_app_config = 'my_app.apps.MyAppConfig'
用正确的值替换my_app
。检查this answer了解更多信息。