Convert secrets to use subqueries

This commit is contained in:
Jeremy Stretch 2020-11-25 14:15:33 -05:00
parent ea5696e700
commit c138712dd3
2 changed files with 10 additions and 6 deletions

View File

@ -1,7 +1,6 @@
import base64
from Crypto.PublicKey import RSA
from django.db.models import Count
from django.http import HttpResponseBadRequest
from rest_framework.exceptions import ValidationError
from rest_framework.permissions import IsAuthenticated
@ -13,6 +12,7 @@ from secrets import filters
from secrets.exceptions import InvalidKey
from secrets.models import Secret, SecretRole, SessionKey, UserKey
from utilities.api import ModelViewSet
from utilities.utils import get_subquery
from . import serializers
ERR_USERKEY_MISSING = "No UserKey found for the current user."
@ -35,8 +35,8 @@ class SecretsRootView(APIRootView):
class SecretRoleViewSet(ModelViewSet):
queryset = SecretRole.objects.annotate(
secret_count=Count('secrets')
).order_by(*SecretRole._meta.ordering)
secret_count=get_subquery(Secret, 'role')
)
serializer_class = serializers.SecretRoleSerializer
filterset_class = filters.SecretRoleFilterSet

View File

@ -2,11 +2,11 @@ import base64
import logging
from django.contrib import messages
from django.db.models import Count
from django.shortcuts import get_object_or_404, redirect, render
from django.utils.html import escape
from django.utils.safestring import mark_safe
from utilities.utils import get_subquery
from utilities.views import (
BulkDeleteView, BulkEditView, BulkImportView, ObjectView, ObjectDeleteView, ObjectEditView, ObjectListView,
)
@ -29,7 +29,9 @@ def get_session_key(request):
#
class SecretRoleListView(ObjectListView):
queryset = SecretRole.objects.annotate(secret_count=Count('secrets')).order_by(*SecretRole._meta.ordering)
queryset = SecretRole.objects.annotate(
secret_count=get_subquery(Secret, 'role')
)
table = tables.SecretRoleTable
@ -49,7 +51,9 @@ class SecretRoleBulkImportView(BulkImportView):
class SecretRoleBulkDeleteView(BulkDeleteView):
queryset = SecretRole.objects.annotate(secret_count=Count('secrets')).order_by(*SecretRole._meta.ordering)
queryset = SecretRole.objects.annotate(
secret_count=get_subquery(Secret, 'role')
)
table = tables.SecretRoleTable