Sfoglia il codice sorgente

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

Jeremy Stretch 2 anni fa
parent
commit
5508e125ba
1 ha cambiato i file con 8 aggiunte e 1 eliminazioni
  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