mirror of https://github.com/jumpserver/jumpserver
fix: calc platform asset count
parent
c4066a03fa
commit
d05514962a
|
@ -1,10 +1,10 @@
|
||||||
from django.db.models import Count
|
from django.db.models import Subquery, OuterRef, Count, Value
|
||||||
|
from django.db.models.functions import Coalesce
|
||||||
from django_filters import rest_framework as filters
|
from django_filters import rest_framework as filters
|
||||||
from rest_framework import generics
|
from rest_framework import generics
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
from rest_framework.decorators import action
|
from rest_framework.decorators import action
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
|
|
||||||
from assets.const import AllTypes
|
from assets.const import AllTypes
|
||||||
from assets.models import Platform, Node, Asset, PlatformProtocol
|
from assets.models import Platform, Node, Asset, PlatformProtocol
|
||||||
from assets.serializers import PlatformSerializer, PlatformProtocolSerializer, PlatformListSerializer
|
from assets.serializers import PlatformSerializer, PlatformProtocolSerializer, PlatformListSerializer
|
||||||
|
@ -42,7 +42,10 @@ class AssetPlatformViewSet(JMSModelViewSet):
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
# 因为没有走分页逻辑,所以需要这里 prefetch
|
# 因为没有走分页逻辑,所以需要这里 prefetch
|
||||||
queryset = super().get_queryset().annotate(assets_amount=Count('assets')).prefetch_related(
|
asset_count_subquery = Asset.objects.filter(platform=OuterRef('pk')).values('platform').annotate(
|
||||||
|
count=Count('id')).values('count')
|
||||||
|
queryset = super().get_queryset().annotate(
|
||||||
|
assets_amount=Coalesce(Subquery(asset_count_subquery), Value(0))).prefetch_related(
|
||||||
'protocols', 'automation', 'labels', 'labels__label'
|
'protocols', 'automation', 'labels', 'labels__label'
|
||||||
)
|
)
|
||||||
queryset = queryset.filter(type__in=AllTypes.get_types_values())
|
queryset = queryset.filter(type__in=AllTypes.get_types_values())
|
||||||
|
|
Loading…
Reference in New Issue