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

perf(filters): Avoid ContentType join in ContentTypeFilter

Resolve the ContentType via get_by_natural_key() and filter by the
FK value to prevent an unnecessary join to django_content_type.

Fixes #21420
Martin Hauser 13 часов назад
Родитель
Сommit
f4c3c90bab
1 измененных файлов с 3 добавлено и 3 удалено
  1. 3 3
      netbox/utilities/filters.py

+ 3 - 3
netbox/utilities/filters.py

@@ -165,12 +165,12 @@ class ContentTypeFilter(django_filters.CharFilter):
 
         try:
             app_label, model = value.lower().split('.')
-        except ValueError:
+            content_type = ContentType.objects.get_by_natural_key(app_label, model)
+        except (ValueError, ContentType.DoesNotExist):
             return qs.none()
         return qs.filter(
             **{
-                f'{self.field_name}__app_label': app_label,
-                f'{self.field_name}__model': model
+                f'{self.field_name}': content_type,
             }
         )