post.py 1.1 KB

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