diff --git a/maraudes/compte_rendu.py b/maraudes/compte_rendu.py index ff84696..ebca6ee 100644 --- a/maraudes/compte_rendu.py +++ b/maraudes/compte_rendu.py @@ -7,18 +7,43 @@ class CompteRendu(Maraude): Gives access to related Observation and Rencontre """ + def rencontre_count(self): + return self.rencontres.count() + + def observation_count(self): + count = 0 + for r in self: + count += r.observations.count() + return count + + def get_observations(self, order="heure_debut", reverse=False): + """ Returns list of all observations related to this instance """ + observations = [] + for r in self._iter(order=order, reverse=reverse): + observations += r.observations.get_queryset() + return observations + def __iter__(self): + """ Iterates on related 'rencontres' objects using default ordering """ return self._iter() - def reversed(self): - return self._iter(order="-heure_debut") + def reversed(self, order="heure_debut"): + return self._iter(order=order, reverse=True) - def _iter(self, order="heure_debut"): - for r in self.rencontres.get_queryset().order_by(order): - yield (r, [o for o in r.observations.all()]) + def _iter(self, order="heure_debut", reverse=False): + """ Iterator on related 'rencontre' queryset. + + Optionnal : + - order : order by this field, default: 'heure_debut' + - reversed : reversed ordering, default: False + """ + if reverse: + order = "-" + order + for rencontre in self.rencontres.get_queryset().order_by(order): + yield rencontre def as_list(self, **kwargs): - return [t for t in self._iter(**kwargs)] + return [r for r in self._iter(**kwargs)] def as_dict(self, key_field="lieu"): """ Returns an 'OrderedDict' with given 'key_field' value as keys and diff --git a/maraudes/models.py b/maraudes/models.py index f23fe7f..01f2d32 100644 --- a/maraudes/models.py +++ b/maraudes/models.py @@ -122,14 +122,8 @@ class Maraude(models.Model): est_passee.boolean = True est_passee.short_description = 'Passée ?' - def rencontre_count(self): - return self.rencontres.count() - def get_observations(self): - observations = [] - for r in self.rencontres.all(): - observations += r.observations.all() - return observations + raise Warning("Deprecated ! Should use CompteRendu proxy object") def get_absolute_url(self): return reverse('maraudes:details', kwargs={'pk': self.id}) diff --git a/maraudes/templates/compte_rendu/compterendu_form.html b/maraudes/templates/compte_rendu/compterendu_form.html index de5f6ca..234834b 100644 --- a/maraudes/templates/compte_rendu/compterendu_form.html +++ b/maraudes/templates/compte_rendu/compterendu_form.html @@ -16,13 +16,12 @@ {% for form in inline_formset %}