django:是否可以使用模型方法更新模型字段?

时间:2016-08-26 17:24:20

标签: python django

所以基本上我有一个具有外键校准的型号设备。我希望在Equipment中有一个字段为'latest_calibrated_date',它从最新创建的校准中获取'cal_date'。这就是我现在所拥有的:

def latest_calibration_date(self):
        return Calibration.objects.filter(cal_asset__id = self.id).order_by('-id')[0].cal_date

但是,出于其他一些应用程序的目的,我想让这不是一个方法,而是一个领域。所以我在考虑使用latest_calibration_date = models.DateField()并在每次添加新校准时更新它。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

正如 Daniel Roseman 所指出的那样,您可以在save模型上覆盖Calibration方法。例如:

class Calibration(model.Model):
    # your fields

    def save(self, *args, **kwargs):
        super(Calibration, self).save(*args, **kwargs)

        # update latest calibration date 

您可以通过多种方式存储参数,例如通过创建Parameter模型来存储变量。

class Parameter(models.Model):
    key = models.CharField(max_length=255, unique=True)
    value = models.IntegerField()
    description = models.TextField(blank=True, null=True)

    def __str__(self):
        return self.key

然后又在save

import time

p = Parameter.objects.get(key='LATEST_CALIBRATION_DATE')
p.value = time.time() # save in UNIX timestamp
p.save()

或您喜欢的任何格式。