在 Web2Py 中,您无法能够在“模型”中创建自定义方法,以便它们可以包含您希望模型实现的业务逻辑,这是正确的吗?
如果是 Django,你可以这样做:
class Aircraft(models.Model):
'''I am an aircraft. I can fly, if I am created in Django.
'''
name = models.CharField(max_length=20)
def fly(self):
# ... some advanced logic here ...
return 'I am flying'
但是是否可以在 Web2Py 中执行类似的操作(创建自定义方法),而无需从头开始编写整个 ORM 系统或在所有表的实例之间共享单个方法?有没有既定的方法可以做到这一点?例如:
db.define_table("aircrafts",
Field("name", type="string", length=20)
)
aircraft = db(db.aircrafts).select().first()
# I am an aircraft too, please make me fly
aircraft.fly()
最佳答案
是的,您可以定义virtual fields :
db.aircrafts.fly = Field.Virtual(lambda row: 'I am flying')
aircraft = db(db.aircrafts).select().first()
print aircraft.fly
或
db.aircrafts.fly = Field.Lazy(lambda row: 'I am flying')
aircraft = db(db.aircrafts).select().first()
print aircraft.fly()
在上面的第一个示例中,当选择所有记录时,会自动计算“fly”值。在第二个示例中,计算是惰性的,仅在特定记录上实际调用 .fly()
时执行。
您还可以使用 old style virtual fields 来执行此操作,这对于复杂的函数可能更好。
请注意,这与 Django 的处理方式不同,因为 web2py 使用数据库抽象层 (DAL) 而不是 ORM。表不是建模为自定义类,而是建模为 DAL Table
类的实例。
关于django - 是否可以将自定义方法添加到 Web2Py 的内置 "models"中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9595653/