查询hybrid_method的值

时间:2015-10-30 18:59:46

标签: python flask sqlalchemy

我想只检索“新”模型。根据{{​​1}} hybrid_method的值,模型是“新的”。

我认为因为我正在处理对象而不是实例,所以这种方法对我来说不起作用。我认为我需要的是一个表达式,但我不确定如何为这个用例编写一个。我基本上只想要在不到30天前创建的模型。

为MyModel

is_new

查询

@hybrid_method
def is_new(self):
    future = self.created_at + datetime.timedelta(days=30)
    if datetime.datetime.now() < future:
        return True
    return False

错误

MyModel.query.filter(MyModel.is_new() == True).all()

2 个答案:

答案 0 :(得分:0)

使用hybrid_method时,您需要按方法的返回值进行过滤。

MyModel.query.filter(MyModel.is_new()).all()

作为替代方案,由于您未将任何参数传递给is_new,因此您可以使用hybrid_property代替@hybrid_property def is_new(self): ... MyModel.query.filter(MyModel.is_new == True).all() 。这将允许您执行比较。

{{1}}

答案 1 :(得分:0)

您需要使用表达式。表达式必须返回一个布尔值。我在下面有一个hybrid_property用于从实例读取,以及一个用于查询数据库的表达式。

<强>模型

@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()

<强>查询

ProductModel.query.filter(ProductModel.is_new_product==True).all()