better use of CompteRendu proxy model

This commit is contained in:
Arthur Gerbaud
2016-09-08 18:10:47 +02:00
parent cfe0dc3f2f
commit d37455bfeb
5 changed files with 38 additions and 25 deletions

View File

@@ -7,18 +7,43 @@ class CompteRendu(Maraude):
Gives access to related Observation and Rencontre 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): def __iter__(self):
""" Iterates on related 'rencontres' objects using default ordering """
return self._iter() return self._iter()
def reversed(self): def reversed(self, order="heure_debut"):
return self._iter(order="-heure_debut") return self._iter(order=order, reverse=True)
def _iter(self, order="heure_debut"): def _iter(self, order="heure_debut", reverse=False):
for r in self.rencontres.get_queryset().order_by(order): """ Iterator on related 'rencontre' queryset.
yield (r, [o for o in r.observations.all()])
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): 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"): def as_dict(self, key_field="lieu"):
""" Returns an 'OrderedDict' with given 'key_field' value as keys and """ Returns an 'OrderedDict' with given 'key_field' value as keys and

View File

@@ -122,14 +122,8 @@ class Maraude(models.Model):
est_passee.boolean = True est_passee.boolean = True
est_passee.short_description = 'Passée ?' est_passee.short_description = 'Passée ?'
def rencontre_count(self):
return self.rencontres.count()
def get_observations(self): def get_observations(self):
observations = [] raise Warning("Deprecated ! Should use CompteRendu proxy object")
for r in self.rencontres.all():
observations += r.observations.all()
return observations
def get_absolute_url(self): def get_absolute_url(self):
return reverse('maraudes:details', kwargs={'pk': self.id}) return reverse('maraudes:details', kwargs={'pk': self.id})

View File

@@ -16,13 +16,12 @@
{% for form in inline_formset %} {% for form in inline_formset %}
<div class="dynamic-formset"> <div class="dynamic-formset">
{% if form.id %}{% bootstrap_field form.id %}{% endif %} {% 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" %} {% 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" %} {% bootstrap_field form.DELETE layout="horizontal" %}
{% endif %} {% endif %}
{% bootstrap_field form.text size="small" layout="horizontal" %}
</div> </div>
{% endfor %} {% endfor %}
</div> </div>

View File

@@ -15,9 +15,7 @@
<div class="panel-body"> <div class="panel-body">
{% include "compte_rendu/compterendu_form.html" %} {% include "compte_rendu/compterendu_form.html" %}
</div> </div>
<div class="panel-footer text-right"> <div class="panel-footer text-right">{% bootstrap_field form.DELETE %}</div>
{% bootstrap_field form.DELETE %}
</div>
</div> </div>
</div> </div>
{% endfor %} {% endfor %}

View File

@@ -229,7 +229,7 @@ class CompteRenduCreateView(generic.DetailView):
@webpage @webpage
class CompteRenduUpdateView(generic.DetailView): class CompteRenduUpdateView(generic.DetailView):
""" Mettre à jour le compte-rendu de la maraude """ """ Mettre à jour le compte-rendu de la maraude """
model = Maraude model = CompteRendu
context_object_name = "maraude" context_object_name = "maraude"
template_name = "compte_rendu/compterendu_update.html" template_name = "compte_rendu/compterendu_update.html"
@@ -243,9 +243,6 @@ class CompteRenduUpdateView(generic.DetailView):
rencontres_queryset = None rencontres_queryset = None
forms = None forms = None
def get_rencontres_queryset(self):
return self.get_object().rencontres.all()
def get_forms_with_inline(self, *args): def get_forms_with_inline(self, *args):
self.base_formset = RencontreInlineFormSet( self.base_formset = RencontreInlineFormSet(
*args, *args,
@@ -254,7 +251,7 @@ class CompteRenduUpdateView(generic.DetailView):
) )
self.inline_formsets = [] self.inline_formsets = []
for i, instance in enumerate(self.get_rencontres_queryset()): for i, instance in enumerate(self.get_object()):
inline_formset = ObservationInlineFormSetNoExtra( inline_formset = ObservationInlineFormSetNoExtra(
*args, *args,
instance = instance, instance = instance,