]> git.parisson.com Git - mezzo.git/commitdiff
[Person] : list related Article, Events and CustomPage
authorEmilie <zawadzki@ircam.fr>
Tue, 14 Feb 2017 15:20:42 +0000 (16:20 +0100)
committerEmilie <zawadzki@ircam.fr>
Tue, 14 Feb 2017 15:20:42 +0000 (16:20 +0100)
app/organization/network/views.py
app/templates/network/person_detail.html

index a70f08401f60b06e970419becc8f7d5379f4e376..4a77459d2c361d544ee24a31b4ce8d6879659af0 100644 (file)
@@ -24,6 +24,7 @@ from django.views.generic.edit import CreateView
 from django.contrib.auth.mixins import LoginRequiredMixin
 from django.views.generic.base import TemplateView
 from django.views.generic import View
+from django.db.models.fields.related import ForeignKey
 from mezzanine.conf import settings
 from django.core.urlresolvers import reverse
 from dal import autocomplete
@@ -50,6 +51,41 @@ class PersonDetailView(SlugMixin, DetailView):
 
     def get_context_data(self, **kwargs):
         context = super(PersonDetailView, self).get_context_data(**kwargs)
+
+        # Person events : this type is separated from the other because
+        # this is not managed by list of person by person in inlines directly
+        events = self.object.events.all()
+        events = (item.event for item in events)
+
+        # All other related models
+        person_list_block_inlines = self.object.person_list_block_inlines.all()
+        related_instances = []
+
+        # for each person list to which the person belongs to...
+        for person_list_block_inline in person_list_block_inlines:
+            related_objects = person_list_block_inline.person_list_block._meta.get_all_related_objects()
+            for related_object in related_objects:
+                if hasattr(person_list_block_inline.person_list_block, related_object.name):
+                    # getting relating inlines like ArticlePersonListBlockInline, PageCustomPersonListBlockInline etc...
+                    related_inlines = getattr(person_list_block_inline.person_list_block, related_object.name).all()
+                    for related_inline in related_inlines:
+                        if not isinstance(related_inline, person_list_block_inline.__class__):  #and not isinstance(person_list_block_inline.person_list_block.__class__):
+                            fields = related_inline._meta.get_fields()
+                            for field in fields:
+                                # check if it is a ForeignKey
+                                if isinstance(field, ForeignKey) :
+                                    instance = getattr(related_inline, field.name)
+                                    # get only article, custom page etc...
+                                    if not isinstance(instance, person_list_block_inline.person_list_block.__class__) :  #and not isinstance(person_list_block_inline.person_list_block.__class__):
+                                        related_instances.append(instance)
+
+        # appends events
+        related_instances += events
+
+        # sort by date
+        related_instances.sort(key=lambda x: x.created)
+
+        context["related_content"] = related_instances
         context["person_email"] = self.object.email if self.object.email else self.object.slug.replace('-', '.')+" (at) ircam.fr"
         return context
 
index b047ec995a10209fc968c00d31c5da9e8e0d281f..13f0ba3ce3960f92af4b2decb6d238672b9cfe99 100644 (file)
@@ -81,3 +81,7 @@
         {% endif %}
     {% endwith %}
 {% endblock %}
+
+{% block page_related_content %}
+    {% include "core/inc/related_content_dynamic.html" with concrete_objects=related_content %}
+{% endblock %}