Фильтрация с помощью логического свойства hybrid_property в sqlalchemy - PullRequest
0 голосов
/ 30 мая 2020

Я использую 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...