days.append({'schedules': [x for x in schedules if x.is_on_weekday(day+1)],
'datetime': datetime(2007, 1, day+1)})
context['days'] = days
+
+ context['episodes'] = Episode.objects.filter(
+ soundfile__podcastable=True, soundfile__fragment=False) \
+ .select_related().extra(select={
+ 'first_diffusion': 'emissions_diffusion.datetime', },
+ select_params=(False, True),
+ where=['''datetime = (SELECT MIN(datetime)
+ FROM emissions_diffusion
+ WHERE episode_id = emissions_episode.id)'''],
+ tables=['emissions_diffusion'],).order_by('-first_diffusion') [:6]
+
+ # get all related soundfiles in a single query
+ soundfiles = {}
+ for soundfile in SoundFile.objects.select_related().filter(podcastable=True,
+ fragment=False, episode__in=[x.id for x in context['episodes']]):
+ soundfiles[soundfile.episode_id] = soundfile
+
+ # replace dynamic property by a static attribute, to avoid database
+ # lookups
+ for episode in context['episodes']:
+ episode.main_sound = soundfiles.get(episode.id)
+
return context
home = Home.as_view()
<div class="wrapper">
<h2>Cette semaine sur Panik</h2>
{% weekview %}
+ <h2>Ecouter</h2>
+ <ul class="custom columns list">
+ {% for episode in episodes %}
+ <li class="item {% if episode.emission.categories.all.count = 0 %}nocat{% endif %} {% for category in episode.emission.categories.all %} {{ category|slugify }}{% endfor %}">
+ {% episode_resume model="inline" klass="standalone"%}
+ </li>
+ {% endfor %}
+ </ul>
</div>
</div>
{% endblock %}