mirror of
https://github.com/ae-utbm/sith.git
synced 2025-07-11 04:19:25 +00:00
Make **a lot** of Forum improvements in reducing the number of queries per page
This commit is contained in:
@ -41,7 +41,7 @@ from core.views import CanViewMixin, CanEditMixin, CanEditPropMixin, CanCreateMi
|
||||
from forum.models import Forum, ForumMessage, ForumTopic, ForumMessageMeta
|
||||
|
||||
class ForumMainView(ListView):
|
||||
queryset = Forum.objects.filter(parent=None)
|
||||
queryset = Forum.objects.filter(parent=None).select_related("_last_message__author", "_last_message__topic___title")
|
||||
template_name = "forum/main.jinja"
|
||||
|
||||
class ForumMarkAllAsRead(RedirectView):
|
||||
@ -53,6 +53,8 @@ class ForumMarkAllAsRead(RedirectView):
|
||||
fi = request.user.forum_infos
|
||||
fi.last_read_date = timezone.now()
|
||||
fi.save()
|
||||
for m in request.user.read_messages.filter(date__lt=fi.last_read_date):
|
||||
m.readers.remove(request.user) # Clean up to keep table low in data
|
||||
except: pass
|
||||
return super(ForumMarkAllAsRead, self).get(request, *args, **kwargs)
|
||||
|
||||
@ -62,9 +64,11 @@ class ForumLastUnread(ListView):
|
||||
paginate_by = settings.SITH_FORUM_PAGE_LENGTH / 2
|
||||
|
||||
def get_queryset(self):
|
||||
l = ForumMessage.objects.exclude(readers=self.request.user).filter(
|
||||
date__gt=self.request.user.forum_infos.last_read_date).values_list('topic') # TODO try to do better
|
||||
return self.model.objects.filter(id__in=l).annotate(models.Max('messages__date')).order_by('-messages__date__max').select_related('author')
|
||||
topic_list = self.model.objects.filter(_last_message__date__gt=self.request.user.forum_infos.last_read_date)\
|
||||
.exclude(_last_message__readers=self.request.user)\
|
||||
.order_by('-_last_message__date')\
|
||||
.select_related('_last_message__author__avatar_pict')
|
||||
return topic_list
|
||||
|
||||
class ForumForm(forms.ModelForm):
|
||||
class Meta:
|
||||
@ -185,6 +189,15 @@ class ForumTopicDetailView(CanViewMixin, DetailView):
|
||||
kwargs["msgs"] = paginator.page(paginator.num_pages)
|
||||
return kwargs
|
||||
|
||||
class ForumMessageView(SingleObjectMixin, RedirectView):
|
||||
model = ForumMessage
|
||||
pk_url_kwarg = "message_id"
|
||||
permanent = False
|
||||
|
||||
def get_redirect_url(self, *args, **kwargs):
|
||||
self.object = self.get_object()
|
||||
return self.object.get_url()
|
||||
|
||||
class ForumMessageEditView(CanEditMixin, UpdateView):
|
||||
model = ForumMessage
|
||||
fields = ['title', 'message']
|
||||
|
Reference in New Issue
Block a user