我想只检索“新”模型。根据{{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()
答案 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()