post.py 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. from django.shortcuts import get_object_or_404
  2. from misago.acl import add_acl
  3. from misago.core.viewmodel import ViewModel as BaseViewModel
  4. from misago.threads.permissions import exclude_invisible_posts
  5. class ViewModel(BaseViewModel):
  6. def __init__(self, request, thread, pk):
  7. model = self.get_post(request, thread, pk)
  8. add_acl(request.user, model)
  9. self._model = model
  10. def get_post(self, request, thread, pk):
  11. try:
  12. thread_model = thread.unwrap()
  13. except AttributeError:
  14. thread_model = thread
  15. queryset = self.get_queryset(request, thread_model).select_related(
  16. 'poster',
  17. 'poster__rank',
  18. 'poster__ban_cache',
  19. )
  20. post = get_object_or_404(queryset, pk=pk)
  21. post.thread = thread_model
  22. post.category = thread.category
  23. return post
  24. def get_queryset(self, request, thread):
  25. return exclude_invisible_posts(request.user, thread.category, thread.post_set)
  26. class ThreadPost(ViewModel):
  27. pass