【问题标题】:Django: Help understanding a signal-functionDjango:帮助理解信号函数
【发布时间】:2023-03-03 21:44:01
【问题描述】:

晚上好,

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

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):
    ...

感谢大家的帮助,祝大家有个愉快的夜晚!

【问题讨论】:

    标签: python django django-models django-signals


    【解决方案1】:

    虽然信号在逻辑上做类似的事情,但它们与模型类中的保存方法略有不同。更具体地说,他们会在您的脑海中回答以下问题:

    • 在保存/删除模型之前我要做什么?
    • 保存/删除模型后我想做什么?
    • 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 中进行以下定义以使信号起作用(我们将应用程序的名称视为 Summing。你可以用你自己的替换它。):

    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保存模型,就可以看到结果了。

    【讨论】:

    • 谢谢你,Metehan Gülaç。这是一个惊人的解释,解决了我的问题!再次感谢!
    猜你喜欢
    • 2012-01-18
    • 1970-01-01
    • 1970-01-01
    • 2021-01-13
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 2011-02-17
    • 1970-01-01
    相关资源
    最近更新 更多