From d37455bfeb28234f1df1f9f6590dd9cc6944f83b Mon Sep 17 00:00:00 2001 From: Arthur Gerbaud Date: Thu, 8 Sep 2016 18:10:47 +0200 Subject: [PATCH] better use of CompteRendu proxy model --- maraudes/compte_rendu.py | 37 ++++++++++++++++--- maraudes/models.py | 8 +--- .../compte_rendu/compterendu_form.html | 7 ++-- .../compte_rendu/compterendu_update.html | 4 +- maraudes/views.py | 7 +--- 5 files changed, 38 insertions(+), 25 deletions(-) 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 %}
{% if form.id %}{% bootstrap_field form.id %}{% endif %} - {% if form.instance.pk %}{% bootstrap_field form.note_ptr %}{% endif %} - {% bootstrap_field form.sujet size="small" layout="horizontal" %} - {% if inline_formset.instance.pk %} + {% bootstrap_field form.text size="small" layout="horizontal" %} + {% if form.instance.pk %} + {% bootstrap_field form.note_ptr %} {% bootstrap_field form.DELETE layout="horizontal" %} {% endif %} - {% bootstrap_field form.text size="small" layout="horizontal" %}
{% endfor %} diff --git a/maraudes/templates/compte_rendu/compterendu_update.html b/maraudes/templates/compte_rendu/compterendu_update.html index 0d3f6e9..5cfb17c 100644 --- a/maraudes/templates/compte_rendu/compterendu_update.html +++ b/maraudes/templates/compte_rendu/compterendu_update.html @@ -15,9 +15,7 @@
{% include "compte_rendu/compterendu_form.html" %}
- + {% endfor %} diff --git a/maraudes/views.py b/maraudes/views.py index 16ba5f0..5471136 100644 --- a/maraudes/views.py +++ b/maraudes/views.py @@ -229,7 +229,7 @@ class CompteRenduCreateView(generic.DetailView): @webpage class CompteRenduUpdateView(generic.DetailView): """ Mettre à jour le compte-rendu de la maraude """ - model = Maraude + model = CompteRendu context_object_name = "maraude" template_name = "compte_rendu/compterendu_update.html" @@ -243,9 +243,6 @@ class CompteRenduUpdateView(generic.DetailView): rencontres_queryset = None forms = None - def get_rencontres_queryset(self): - return self.get_object().rencontres.all() - def get_forms_with_inline(self, *args): self.base_formset = RencontreInlineFormSet( *args, @@ -254,7 +251,7 @@ class CompteRenduUpdateView(generic.DetailView): ) self.inline_formsets = [] - for i, instance in enumerate(self.get_rencontres_queryset()): + for i, instance in enumerate(self.get_object()): inline_formset = ObservationInlineFormSetNoExtra( *args, instance = instance,