Преглед изворни кода

Fixes #14512: Omit unused queryset annotations for REST API requests using brief mode

Jeremy Stretch пре 2 година
родитељ
комит
5508e125ba
1 измењених фајлова са 8 додато и 1 уклоњено
  1. 8 1
      netbox/netbox/api/viewsets/mixins.py

+ 8 - 1
netbox/netbox/api/viewsets/mixins.py

@@ -56,8 +56,15 @@ class BriefModeMixin:
     def get_queryset(self):
         qs = super().get_queryset()
 
-        # If using brief mode, clear all prefetches from the queryset and append only brief_prefetch_fields (if any)
         if self.brief:
+            serializer_class = self.get_serializer_class()
+
+            # Clear any annotations for fields not present on the nested serializer
+            for annotation in list(qs.query.annotations.keys()):
+                if annotation not in serializer_class().fields:
+                    qs.query.annotations.pop(annotation)
+
+            # Clear any prefetches from the queryset and append only brief_prefetch_fields (if any)
             return qs.prefetch_related(None).prefetch_related(*self.brief_prefetch_fields)
 
         return qs