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保存模型,然后你会看到结果。
晚上好,
我知道,我刚才问过类似的问题,但我在理解信号的更详细功能方面仍然遇到问题。所以我希望有人能帮我解决这个问题!?例如,我的 "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保存模型,然后你会看到结果。