Я использую hybrid_property для создания вычисляемого свойства, которое указывает, публикуется ли статья на основе запланированной sh даты публикации и является ли она «опубликована» или нет:
class Article(db.Model):
__tablename__ = 'articles'
id = db.Column(db.Integer, primary_key=True)
publish_date = db.Column(db.DateTime, index=True)
is_published = db.Column(db.Boolean,index=True,default=False)
def __repr__(self):
return '<Article {}>'.format(self.id)
@hybrid_property
def published(self):
"""Returns true if the publish date is at or before the current time and is_published is true."""
return self.is_published and self.publish_date <= datetime.now()
Учитывая следующий набор статей:
Статья 1: Публикация sh Дата: 2020-5-12 is_published: True
Article 2: Publi sh date: 2020-5-13 is_published: Ложь
Я могу выполнить следующую проверку:
>>> Article.query.all()[0].published
True
>>> Article.query.all()[1].published
False
Но при запросе фильтр возвращает, как если бы значение было истинным для этого вычисляемого поля для всех статей:
>>> Article.query.filter_by(published=False).all()
[]
>>> Article.query.filter_by(published=True).all()
[<Article 1>, <Article 2>]
Я что-то не так делаю? Есть ли лучший способ быстро и легко отфильтровать по основному расчету c?