我正在尝试在依赖于相关对象的django模型类中定义自定义变量。这是我的代码的简化版本:
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对象和相应的Position对象已经创建并存储在DB中。当我尝试初始化Vm对象vm = Vm.objects.get(pk=1)
时,我得到错误AttributeError: 'NoneType' object has no attribute 'position'
,就像位置对象尚未初始化一样。我该怎么办?
答案 0 :(得分:0)
这是因为position
可以为空,如果值为None
,则您无法访问position
的{{1}}属性
一个解决方案是:
None
另一种方法:
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.
每当您想要访问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.
时,请执行
port