到目前为止,在我使用的ORM中,有一个选项可以向模型添加值(字段?),该值未存储在数据库中,而是使用其他值构造的。
这是一个简短的示例:
class MediaFile(BaseModel):
ID = IntegerField()
FileName = str(ID) + ".jpg"
因此,有ID
存储在数据库中,而FileName
是由ID
构造的。上面的示例当然在PeeWee中不起作用,因为ID
是IntegerField
,而不是我需要的int
。
我如何在PeeWee中做这样的事情?怎么称呼?
答案 0 :(得分:1)
好吧,如果您只想访问存储在数据库中的不是的属性,请记住,peewee模型只是Python类:
Collision& Player::getCollisionObject()
{
return m_CollisionBody;
}
有关希望同时用作SQL构造和计算实例值的更复杂的操作,请参见hybrid properties。使用混合属性的示例:
class MediaFile(BaseModel):
ID = AutoField() # You should probably use this for auto-inc IDs.
@property
def FileName(self):
return str(self.ID) + '.jpg'
通过此混合属性和混合方法,我们可以在模型实例的SQL查询或中使用这些属性。因此,我们最终能够执行以下操作:
class Interval(Model):
start = IntegerField()
end = IntegerField()
@hybrid_property
def length(self):
return self.end - self.start
@hybrid_method
def contains(self, point):
return (self.start <= point) & (point < self.end)
将生成以下SQL:
query = Interval.select().where(Interval.contains(2))
但是我们也可以这样做:
SELECT "id", "start", "end"
FROM "interval" AS t1
WHERE (("start" <= 2) AND (2 < "end"))