django - 是否可以将自定义方法添加到 Web2Py 的内置 "models"中?

标签 django methods model web2py

在 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/

相关文章:

python - 如何在Pycharm中创建Django的虚拟环境?

python - 使用随机主键创建 Django 对象

java - 用 Java 调试我的字母成绩计算器

python - 如何在 Python 中获取实例变量?

java - OneToMany 关系和使用 Play Framework 保存表单

python - Django 导入错误,URLS 和 ROOT_URLCONF 混淆

Django注册和多个配置文件

java - 如何创建另一个方法中已存在的新对象?

mysql - Eloquent 不会更新 MySQL 中的所有记录

android - 如何在 android 中为 json 制作模型类进行改造?