基于其他模型字段自动更新Django模型

时间:2015-07-16 09:41:00

标签: python django

根据另一个模型的结果更新模型字段的最佳方法是什么。

即我有以下内容,

from django.db import models

class ValidateResult(models.Model):
    number = models.IntegerField(unique=True)
    version = models.CharField(max_length=100)

class TotalResult(models.Model):
    total = models.IntegerField()

我要求的是TotalResults.totalValidateResult.number中所有字段的总数。我想将其写入模型中,因此每次更新ValidateResults模型时,都会自动更新TotalResult模型中的总计。

有什么想法吗?

谢谢,

1 个答案:

答案 0 :(得分:3)

您可以使用signals功能:

  

Django包含一个“信号调度程序”,它有助于在框架中的其他位置发生操作时通知解耦应用程序。简而言之,信号允许某些发送者通知一组接收器已经发生了某些动作。当许多代码可能对同一事件感兴趣时,它们特别有用。

django.db.models.signals模块预定义模型系统发送的一组信号。您可以使用在模型save()方法结束时触发的post_save信号。

from django.db.models.signals import pre_save
from django.dispatch import receiver
from myapp.models import MyModel


@receiver(post_save, sender=ValidateResult)
def my_handler(sender, **kwargs):
    ...