42 lines
1.1 KiB
Python
42 lines
1.1 KiB
Python
from .models import Maraude
|
|
|
|
from collections import OrderedDict
|
|
|
|
class CompteRendu(Maraude):
|
|
""" Proxy for Maraude objects.
|
|
Gives access to related Observation and Rencontre
|
|
"""
|
|
|
|
def __iter__(self):
|
|
return self._iter()
|
|
|
|
def reversed(self):
|
|
return self._iter(order="-heure_debut")
|
|
|
|
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 as_list(self, **kwargs):
|
|
return [t for t in self._iter(**kwargs)]
|
|
|
|
def as_dict(self, key_field="lieu"):
|
|
""" Returns an 'OrderedDict' with given 'key_field' value as keys and
|
|
the corresponding (rencontre, observations) tuple
|
|
"""
|
|
condensed = OrderedDict()
|
|
for r, obs in self.__iter__():
|
|
val = getattr(r, key_field, None)
|
|
if not val:
|
|
pass
|
|
if not val in condensed:
|
|
condensed[val] = [(r, obs)]
|
|
else:
|
|
condensed[val].append((r, obs))
|
|
return condensed
|
|
|
|
class Meta:
|
|
proxy = True
|
|
|
|
|