首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >hybrid_method查询值

hybrid_method查询值
EN

Stack Overflow用户
提问于 2015-10-30 18:59:46
回答 2查看 356关注 0票数 1

我只想找回“新”模型。基于is_new hybrid_method的值,模型是“新的”。

我认为,由于我处理的是对象而不是实例,这种方法对我来说是行不通的。我想我需要的是一个表达式,但我不知道如何为这个用例编写一个表达式。我基本上只想要不到30天前创建的模型。

MyModel

代码语言:javascript
复制
@hybrid_method
def is_new(self):
    future = self.created_at + datetime.timedelta(days=30)
    if datetime.datetime.now() < future:
        return True
    return False

查询

代码语言:javascript
复制
MyModel.query.filter(MyModel.is_new() == True).all()

误差

TypeError: Boolean value of this clause is not defined

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-30 20:55:57

你需要用一个表达式。表达式必须返回布尔值。下面有一个用于从实例读取的hybrid_property和一个用于查询数据库的表达式。

模型

代码语言:javascript
复制
@hybrid_property
def is_new_product(self):
    future = self.created_at + datetime.timedelta(days=30)
    if datetime.datetime.now() < future:
        return True
    return False

@is_new_product.expression
def is_new_product(cls):
    delta = datetime.timedelta(days=30)
    return cls.created_at + delta > datetime.datetime.now()

查询

代码语言:javascript
复制
ProductModel.query.filter(ProductModel.is_new_product==True).all()
票数 1
EN

Stack Overflow用户

发布于 2015-10-30 20:14:49

使用hybrid_method时,需要通过方法的返回值进行筛选。

代码语言:javascript
复制
MyModel.query.filter(MyModel.is_new()).all()

作为另一种选择,由于您不向is_new传递任何参数,所以可以使用hybrid_property。这将允许您执行比较。

代码语言:javascript
复制
@hybrid_property
def is_new(self):
    ...

MyModel.query.filter(MyModel.is_new == True).all()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33443140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档