Bonjour,
Je travaille avec Python 3.5 et Django 1.10 et j’ai les deux modèles suivants :
1 2 3 4 5 6 7 | class Member(models.Model): # ... class Registration(models.Model): member = models.ForeignKey(Member, on_delete=models.CASCADE, related_name='registrations') date = models.DateField() # ... |
Dans mon site d’administration (celui généré par Django), je souhaiterais pouvoir filter les membres en fonction de leurs inscriptions. Par exemple :
- Quels membres n’ont aucune inscription ?
- Quels membres ont fait leur dernière inscription entre telles dates ?
- Quels membres étaient inscrits telle date ?1
Je pensais travailler avec ce genre de méthodes :
1 2 3 4 5 6 7 | class Member(models.Model): # ... @property # Permet d'y accéder dans les templates def last_registration_date(self): reg = self.registrations.last() return reg.date if reg is not None else None |
Mais Django ne gère pas cela vu que ces propriétés ne sont pas des champs donc ne peuvent (à priori) être exploitées dans des requêtes SQL.
J’ai envisagé de créer un filtre personnel, mais ça me semble lourd et j’ignore comment m’y prendre proprement.
Auriez-vous une piste ? Serait-il possible de construire une sorte de champ abstrait (par exemple last_registration
) que je pourrais utiliser comme filtre ?
Merci !
-
Les inscriptions suivent les années scolaires et sont valables jusqu’au 1er septembre suivant. Par exemple, si je m’inscris le 15 décembre 2016, je le reste jusqu’au 1er septembre 2017. ↩