J'ai un Event
Modèle avec les deux start_date
et due_date
colonnes. Je veux créer un moyen facile d'obtenir tous les événements actifs (qui ont déjà été commencés mais pas encore terminés).
C'est ma classe de modèle d'événement :
class Event(db.Model):
__tablename__ = 'events'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(254))
description = db.Column(db.Text)
start_date = db.Column(db.DateTime)
due_date = db.Column(db.DateTime)
Je connais deux solutions efficaces pour répondre à ce besoin :
1 : Avec un staticmethod
qui effectuera tous les filtres sur l'objet Event.query et renverra une liste complète des événements actifs.
class Event(BaseModel):
...
@staticmethod
def get_active():
return Event.query.filter(...).all()
# Usage:
records = Event.get_active()
2 : En créant un nouvel objet requête qui hérite de BaseQuery
et affectez cette nouvelle classe "EventQuery" à la classe de modèle query_class
membre.
class EventQuery(BaseQuery):
def get_active(self):
return self.filter(...)
class Event(BaseModel):
__tablename__ = 'events'
query_class = EventQuery
....
# Usage:
Event.query.get_active().all()
Je me demande donc quelle méthode est la meilleure/la plus recommandée ?