Python Django: initialize custom model variable based on related object
我试图在django模型类中定义一个自定义变量,该变量依赖于相关的对象。以下是我的代码的简化版本:
1 2 3 4 5 6 7 8 | class Vm(models.Model): position = models.OneToOneField('Position', null=True, blank=True, default = None) def __init__(self, *args, **kwargs): models.Model.__init__(self) self.port = 5000+10*(self.position.position-1) class Position(models.Model): position = models.IntegerField() |
因此,当我初始化一个VM对象时,我想访问它的"port"属性,该属性取决于它的相关外键"position"。
虚拟机对象和相应的位置对象已经创建并存储在数据库中。当我试图初始化一个vm对象
这是因为
一个解决办法是:
1 2 3 4 5 6 7 8 | class Vm(models.Model): position = models.OneToOneField('Position', null=True, blank=True, default = None) def __init__(self, *args, **kwargs): super(Vm, self).__init__( *args, **kwargs) if self.position: self.port = 5000+10*(self.position.position-1) else: self.port = 5000 #Or whatever the default you want to set. |
另一种方法:
1 2 3 4 5 6 7 8 9 10 | class Vm(models.Model): position = models.OneToOneField('Position', null=True, blank=True, default = None) def __init__(*args, **kwargs): super(Vm, self).__init__(self, *args, **kwargs) def port(self): if self.position: return 5000+10*(self.position.position-1) else: return 5000 #or any default value you wish to specify. |
无论何时你想访问
1 2 | vm = Vm.objects.get(pk=1) port = vm.port() |