每个Django模型都有一个自动创建的默认主键id
。我希望模型对象具有另一个属性big_id
,其计算方式如下:
big_id = id * SOME_CONSTANT
我希望big_id
作为model_obj.big_id
访问,而没有相应的数据库表,其中包含名为big_id
的列。
这可能吗?
答案 0 :(得分:8)
嗯,django模型实例只是python对象,所以我还是被告知了:P
我就是这样做的:
class MyModel(models.Model):
CONSTANT = 1234
id = models.AutoField(primary_key=True) # not really needed, but hey
@property
def big_id(self):
return self.pk * MyModel.CONSTANT
显然,如果您尝试使用未保存的模型,则会出现异常。您还可以预先计算big_id值,而不是每次访问时计算它。
答案 1 :(得分:1)
class Person(models.Model):
x = 5
name = ..
email = ..
def _get_y(self):
if self.id:
return x * self.id
return None
y = property(_get_y)
答案 2 :(得分:0)
你现在有两个我能想到的选择: