为什么pre_save信号对模型文件以外的其他文件不起作用?

时间:2019-04-01 17:09:21

标签: django django-models

我正在尝试为某个模型上创建新的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

1 个答案:

答案 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了解更多信息。