Django:帮助理解信号函数

Django: Help understanding a signal-function

晚上好,

我知道,我刚才问过类似的问题,但我在理解信号的更详细功能方面仍然遇到问题。所以我希望有人能帮我解决这个问题!?例如,我的 "models.py" 中有一个 class,如下所示:

class ExampleModel(models.Model):
    name = models.CharField(max_length=255, null=False, blank=False)
    value1 = models.IntegerField()
    value2 = models.IntegerField()
    value_of_1_and_2 = models.IntegerField()

    def __str__(self):
        return self.name

我想让我的字段 "value_of_1_and_2" 在保存之前自动填充其他两个字段的总和... 这可能吗?我尝试了一些东西,但遇到了这样的 "pre_save":

@receiver(pre_save, sender=ExameplModel)
def save(self, *args, **kwargs):
    ...

感谢大家的帮助,祝大家度过一个愉快的夜晚!

尽管这些信号在逻辑上做的事情相似,但它们与模型中的保存方法略有不同 class。更具体地说,他们在你脑海中回答了以下问题:

  • 模型是saved/deleted之前我想做什么?
  • 模型是saved/deleted后我想做什么?
  • Others ..

如果我们达到你想要的;如果我理解正确,您想在保存模型时将 value_of_1_and_2 字段留空,并且您希望 django 将其保存在使用您设置的方法作为背景。

首先,我更喜欢将信号和模型分开,这样看起来更简洁。所以在 models.py 文件旁边,创建 signals.py 文件.

signals.py :

from .models import ExampleModel
from django.db.models.signals import pre_save
from django.dispatch import receiver

@receiver(pre_save, sender=ExampleModel)
def pre_save_example_model(sender, instance, *args, **kwargs):
    if not instance.value_of_1_and_2:
        instance.value_of_1_and_2 = instance.value1 + instance.value2

然后在 apps.py 中进行以下定义以使信号工作(让我们将应用程序的名称视为求和.可以自己替换.):

apps.py :

from django.apps import AppConfig

class SummingConfig(AppConfig):
    name = 'summing'

    def ready(self):
        from . import signals

这里最重要的是:由于您将 value_of_1_and_2 字段留空,因此您应该更新您的字段如下。否则 Django 将引发错误。

value_of_1_and_2 = models.IntegerField(blank=True, default=0)

就是这样。输入value1和value2保存模型,然后你会看到结果。