Просмотр исходного кода

wip category serialization changes

Rafał Pitoń 7 лет назад
Родитель
Сommit
8ef0dee0fb

+ 22 - 0
misago/categories/context_processors.py

@@ -0,0 +1,22 @@
+from django.db.models import Q
+
+from misago.core.cache import cache
+
+from .serializers import BasicCategorySerializer
+from .models import Category
+
+
+def preload_categories_json(request):
+    cache_key = 'misago_categories_json_{}'.format(request.user.acl_key)
+    categories_json = cache.get(cache_key, 'nada')
+    if categories_json == 'nada':
+        is_root = Q(level=0)
+        is_visible = Q(id__in=request.user.acl_cache['visible_categories'])
+
+        queryset = Category.objects.all_categories(include_root=True)
+        queryset = queryset.filter(is_root | is_visible)
+
+        categories_json = BasicCategorySerializer(queryset, many=True).data
+        cache.set(cache_key, categories_json, 15 * 60)
+    request.frontend_context['store']['categories'] = categories_json
+    return {}

+ 11 - 1
misago/categories/serializers.py

@@ -8,7 +8,11 @@ from misago.core.utils import format_plaintext_for_html
 from .models import Category
 
 
-__all__ = ['CategorySerializer']
+__all__ = [
+    'CategorySerializer',
+    'BasicCategorySerializer',
+    'CategoryWithPosterSerializer',
+]
 
 
 def last_activity_detail(f):
@@ -134,3 +138,9 @@ class CategoryWithPosterSerializer(CategorySerializer):
             return []
 
 CategoryWithPosterSerializer = CategoryWithPosterSerializer.extend_fields('last_poster')
+
+
+BasicCategorySerializer = CategorySerializer.subset_fields(
+    'id', 'parent', 'name', 'description', 'is_closed', 'css_class',
+    'level', 'lft', 'rght', 'url'
+)

+ 1 - 0
misago/project_template/project_name/settings.py

@@ -265,6 +265,7 @@ TEMPLATES = [
                 'misago.legal.context_processors.legal_links',
 
                 # Data preloaders
+                'misago.categories.context_processors.preload_categories_json',
                 'misago.conf.context_processors.preload_settings_json',
                 'misago.users.context_processors.preload_user_json',
 

+ 1 - 6
misago/threads/serializers/thread.py

@@ -3,7 +3,7 @@ from rest_framework import serializers
 from django.urls import reverse
 
 from misago.api.serializers import MutableFields
-from misago.categories.serializers import CategorySerializer
+from misago.categories.serializers import BasicCategorySerializer
 from misago.threads.models import Thread
 
 from .poll import PollSerializer
@@ -16,11 +16,6 @@ __all__ = [
     'ThreadsListSerializer',
 ]
 
-BasicCategorySerializer = CategorySerializer.subset_fields(
-    'id', 'parent', 'name', 'description', 'is_closed', 'css_class',
-    'level', 'lft', 'rght', 'is_read', 'url'
-)
-
 
 class ThreadSerializer(serializers.ModelSerializer, MutableFields):
     category = BasicCategorySerializer(many=False, read_only=True)