diff --git a/mural/views.py b/mural/views.py index c4140d0..4598308 100644 --- a/mural/views.py +++ b/mural/views.py @@ -350,9 +350,9 @@ class CategoryIndex(LoginRequiredMixin, generic.ListView): user = self.request.user if user.is_staff: - categories = Category.objects.all() + categories = Category.objects.extra(select = {"has_message": "select 1 FROM mural_muralvisualizations AS visul LEFT JOIN mural_categorypost AS post ON visul.post_id = post.mural_ptr_id LEFT JOIN mural_comment AS com ON visul.comment_id = com.id LEFT JOIN mural_categorypost AS post2 ON com.post_id = post2.mural_ptr_id WHERE visul.viewed = FALSE AND visul.user_id = %s AND (post.space_id = categories_category.id OR post2.space_id = categories_category.id) LIMIT 1"}, select_params = (user.id, )).order_by('has_message', 'name') else: - categories = Category.objects.filter(Q(coordinators__pk = user.pk) | Q(subject_category__professor__pk = user.pk) | Q(subject_category__students__pk = user.pk, visible = True)).distinct() + categories = Category.objects.extra(select = {"has_message": "select 1 FROM mural_muralvisualizations AS visul LEFT JOIN mural_categorypost AS post ON visul.post_id = post.mural_ptr_id LEFT JOIN mural_comment AS com ON visul.comment_id = com.id LEFT JOIN mural_categorypost AS post2 ON com.post_id = post2.mural_ptr_id WHERE visul.viewed = FALSE AND visul.user_id = %s AND (post.space_id = categories_category.id OR post2.space_id = categories_category.id) LIMIT 1"}, select_params = (user.id, )).filter(Q(coordinators__pk = user.pk) | Q(subject_category__professor__pk = user.pk) | Q(subject_category__students__pk = user.pk, visible = True)).distinct().order_by('has_message', 'name') self.totals['general'] = MuralVisualizations.objects.filter(Q(user = user) & Q(viewed = False) & (Q(post__generalpost__isnull = False) | Q(comment__post__generalpost__isnull = False))).distinct().count() self.totals['category'] = MuralVisualizations.objects.filter(Q(user = user) & Q(viewed = False) & ((Q(user__is_staff = True) & (Q(post__categorypost__isnull = False) | Q(comment__post__categorypost__isnull = False))) | Q(post__categorypost__space__coordinators = user) | Q(comment__post__categorypost__space__coordinators = user) | Q(post__categorypost__space__subject_category__students = user) | Q(comment__post__categorypost__space__subject_category__students = user) | Q(post__categorypost__space__subject_category__professor = user) | Q(comment__post__categorypost__space__subject_category__professor = user))).distinct().count() @@ -639,9 +639,9 @@ class SubjectIndex(LoginRequiredMixin, generic.ListView): user = self.request.user if user.is_staff: - subjects = Subject.objects.all() + subjects = Subject.objects.extra(select = {"has_message": "select 1 FROM mural_muralvisualizations AS visul LEFT JOIN mural_subjectpost AS post ON visul.post_id = post.mural_ptr_id LEFT JOIN mural_comment AS com ON visul.comment_id = com.id LEFT JOIN mural_subjectpost AS post2 ON com.post_id = post2.mural_ptr_id WHERE visul.viewed = FALSE AND visul.user_id = %s AND (post.space_id = subjects_subject.id OR post2.space_id = subjects_subject.id) LIMIT 1"}, select_params = (user.id, )).order_by('has_message', 'name') else: - subjects = Subject.objects.filter(Q(category__coordinators__pk = user.pk) | Q(professor__pk = user.pk) | Q(students__pk = user.pk, visible = True)).distinct() + subjects = Subject.objects.extra(select = {"has_message": "select 1 FROM mural_muralvisualizations AS visul LEFT JOIN mural_subjectpost AS post ON visul.post_id = post.mural_ptr_id LEFT JOIN mural_comment AS com ON visul.comment_id = com.id LEFT JOIN mural_subjectpost AS post2 ON com.post_id = post2.mural_ptr_id WHERE visul.viewed = FALSE AND visul.user_id = %s AND (post.space_id = subjects_subject.id OR post2.space_id = subjects_subject.id) LIMIT 1"}, select_params = (user.id, )).filter(Q(category__coordinators__pk = user.pk) | Q(professor__pk = user.pk) | Q(students__pk = user.pk, visible = True)).distinct().order_by('has_message', 'name') self.totals['general'] = MuralVisualizations.objects.filter(Q(user = user) & Q(viewed = False) & (Q(post__generalpost__isnull = False) | Q(comment__post__generalpost__isnull = False))).distinct().count() self.totals['category'] = MuralVisualizations.objects.filter(Q(user = user) & Q(viewed = False) & ((Q(user__is_staff = True) & (Q(post__categorypost__isnull = False) | Q(comment__post__categorypost__isnull = False))) | Q(post__categorypost__space__coordinators = user) | Q(comment__post__categorypost__space__coordinators = user) | Q(post__categorypost__space__subject_category__students = user) | Q(comment__post__categorypost__space__subject_category__students = user) | Q(post__categorypost__space__subject_category__professor = user) | Q(comment__post__categorypost__space__subject_category__professor = user))).distinct().count() -- libgit2 0.21.2