def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) self.object.source = self.object.source.split(',')[0] context['config'] = VANILLA_UI_CONFIG_FOR_RATINGS context['genres'] = ', '.join(genre.title for genre in self.object.genre.all()) if self.request.user.is_authenticated: context['suggestion_form'] = SuggestionForm( work=self.object, instance=Suggestion(user=self.request.user, work=self.object)) context['rating'] = current_user_rating(self.request, self.object) context['references'] = [] for reference in self.object.reference_set.all(): for domain, name in REFERENCE_DOMAINS: if reference.url.startswith(domain): context['references'].append((reference.url, name)) nb = Counter( Rating.objects.filter(work=self.object).values_list('choice', flat=True)) labels = OrderedDict([ ('favorite', 'Ajoutés aux favoris'), ('like', 'Ont aimé'), ('neutral', 'Neutre'), ('dislike', 'N\'ont pas aimé'), ('willsee', 'Ont envie de voir'), ('wontsee', 'N\'ont pas envie de voir'), ]) seen_ratings = {'favorite', 'like', 'neutral', 'dislike'} total = sum(nb.values()) if total > 0: context['stats'] = [] seen_total = sum(nb[rating] for rating in seen_ratings) for rating, label in labels.items(): if seen_total > 0 and rating not in seen_ratings: continue context['stats'].append({ 'value': nb[rating], 'colors': RATING_COLORS[rating], 'label': label }) context['seen_percent'] = round(100 * seen_total / float(total)) return context
def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) self.object.source = self.object.source.split(',')[0] context['config'] = VANILLA_UI_CONFIG_FOR_RATINGS context['genres'] = ', '.join(genre.title for genre in self.object.genre.all()) if self.request.user.is_authenticated: context['suggestion_form'] = SuggestionForm(work=self.object, instance=Suggestion(user=self.request.user, work=self.object)) context['rating'] = current_user_rating(self.request, self.object) context['references'] = [] for reference in self.object.reference_set.all(): for domain, name in REFERENCE_DOMAINS: if reference.url.startswith(domain): context['references'].append((reference.url, name)) nb = Counter(Rating.objects.filter(work=self.object).values_list('choice', flat=True)) labels = OrderedDict([ ('favorite', 'Ajoutés aux favoris'), ('like', 'Ont aimé'), ('neutral', 'Neutre'), ('dislike', 'N\'ont pas aimé'), ('willsee', 'Ont envie de voir'), ('wontsee', 'N\'ont pas envie de voir'), ]) seen_ratings = {'favorite', 'like', 'neutral', 'dislike'} total = sum(nb.values()) if total > 0: context['stats'] = [] seen_total = sum(nb[rating] for rating in seen_ratings) for rating, label in labels.items(): if seen_total > 0 and rating not in seen_ratings: continue context['stats'].append({'value': nb[rating], 'colors': RATING_COLORS[rating], 'label': label}) context['seen_percent'] = round(100 * seen_total / float(total)) events = self.object.event_set \ .filter(date__gte=timezone.now()) \ .annotate(nb_attendees=Sum(Case( When(attendee__attending=True, then=Value(1)), default=Value(0), output_field=IntegerField(), ))) if len(events) > 0: my_events = {} if self.request.user.is_authenticated: my_events = dict(self.request.user.attendee_set.filter( event__in=events).values_list('event_id', 'attending')) context['events'] = [ { 'id': event.id, 'attending': my_events.get(event.id, None), 'type': event.get_event_type_display(), 'channel': event.channel, 'date': event.get_date(), 'link': event.link, 'location': event.location, 'nb_attendees': event.nb_attendees, } for event in events ] return context