我是刚到django的,我正在尝试做一些非常简单的事情。 我的models.py如下:
from django.db import models
class DiskDrive(models.Model):
deviceId = models.CharField(max_length=64, primary_key=True)
freeSpace = models.BigIntegerField()
def __unicode__(self):
return self.deviceId
class StoragePool(models.Model):
poolId = models.CharField(max_length=256, primary_key=True)
size = models.BigIntegerField()
drive = models.ForeignKey(DiskDrive, related_name='pools')
def __unicode__(self):
return self.poolId
我还没有向views.py和url.py添加任何内容。 我可以创建这两个类的对象。 每当我创建StoragePool类的对象时,我都希望将相关DiskDrive对象的“freeSpace”属性的值减少“StoragePool”对象的“size”。我该怎么做?请帮忙
听起来像是一个完美的工作后保存信号:
有关信号如何工作的更多信息,请参见Django signals documentation。简而言之,每次创建或更新
StoragePool
对象时都会调用此方法注意事项:
我使用F expression来引用当前数据库的
size
值,而不是盲目地保存Django端的任何内容(当多个客户机将创建新的StoragePool
对象时,这将确保正确的值)当
size
被更新时,很可能您也想调整freeSpace
属性—而不仅仅是在StoragePool
创建时。要做到这一点,只需删除if created
检查,它将在每个StoragePool.save()
相关问题 更多 >
编程相关推荐