mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
12552 add back add_related_count
This commit is contained in:
@ -99,14 +99,13 @@ class PassThroughPortMixin(object):
|
||||
#
|
||||
|
||||
class RegionViewSet(NetBoxModelViewSet):
|
||||
queryset = Region.objects.all().prefetch_related('tags')
|
||||
# queryset = Region.objects.add_related_count(
|
||||
# Region.objects.all(),
|
||||
# Site,
|
||||
# 'region',
|
||||
# 'site_count',
|
||||
# cumulative=True
|
||||
# ).prefetch_related('tags')
|
||||
queryset = Region.objects.add_related_count(
|
||||
Region.objects.all(),
|
||||
Site,
|
||||
'region',
|
||||
'site_count',
|
||||
cumulative=True
|
||||
).prefetch_related('tags')
|
||||
serializer_class = serializers.RegionSerializer
|
||||
filterset_class = filtersets.RegionFilterSet
|
||||
|
||||
@ -116,14 +115,13 @@ class RegionViewSet(NetBoxModelViewSet):
|
||||
#
|
||||
|
||||
class SiteGroupViewSet(NetBoxModelViewSet):
|
||||
queryset = SiteGroup.objects.all().prefetch_related('tags')
|
||||
# queryset = SiteGroup.objects.add_related_count(
|
||||
# SiteGroup.objects.all(),
|
||||
# Site,
|
||||
# 'group',
|
||||
# 'site_count',
|
||||
# cumulative=True
|
||||
# ).prefetch_related('tags')
|
||||
queryset = SiteGroup.objects.add_related_count(
|
||||
SiteGroup.objects.all(),
|
||||
Site,
|
||||
'group',
|
||||
'site_count',
|
||||
cumulative=True
|
||||
).prefetch_related('tags')
|
||||
serializer_class = serializers.SiteGroupSerializer
|
||||
filterset_class = filtersets.SiteGroupFilterSet
|
||||
|
||||
@ -152,20 +150,19 @@ class SiteViewSet(NetBoxModelViewSet):
|
||||
#
|
||||
|
||||
class LocationViewSet(NetBoxModelViewSet):
|
||||
queryset = Location.objects.all().prefetch_related('site', 'tags')
|
||||
# queryset = Location.objects.add_related_count(
|
||||
# Location.objects.add_related_count(
|
||||
# Location.objects.all(),
|
||||
# Device,
|
||||
# 'location',
|
||||
# 'device_count',
|
||||
# cumulative=True
|
||||
# ),
|
||||
# Rack,
|
||||
# 'location',
|
||||
# 'rack_count',
|
||||
# cumulative=True
|
||||
# ).prefetch_related('site', 'tags')
|
||||
queryset = Location.objects.add_related_count(
|
||||
Location.objects.add_related_count(
|
||||
Location.objects.all(),
|
||||
Device,
|
||||
'location',
|
||||
'device_count',
|
||||
cumulative=True
|
||||
),
|
||||
Rack,
|
||||
'location',
|
||||
'rack_count',
|
||||
cumulative=True
|
||||
).prefetch_related('site', 'tags')
|
||||
serializer_class = serializers.LocationSerializer
|
||||
filterset_class = filtersets.LocationFilterSet
|
||||
|
||||
|
@ -198,14 +198,13 @@ class PathTraceView(generic.ObjectView):
|
||||
#
|
||||
|
||||
class RegionListView(generic.ObjectListView):
|
||||
queryset = Region.objects.all().order_siblings_by("name")
|
||||
# queryset = Region.objects.add_related_count(
|
||||
# Region.objects.all(),
|
||||
# Site,
|
||||
# 'region',
|
||||
# 'site_count',
|
||||
# cumulative=True
|
||||
# )
|
||||
queryset = Region.objects.add_related_count(
|
||||
Region.objects.all(),
|
||||
Site,
|
||||
'region',
|
||||
'site_count',
|
||||
cumulative=True
|
||||
)
|
||||
filterset = filtersets.RegionFilterSet
|
||||
filterset_form = forms.RegionFilterForm
|
||||
table = tables.RegionTable
|
||||
@ -245,28 +244,26 @@ class RegionBulkImportView(generic.BulkImportView):
|
||||
|
||||
|
||||
class RegionBulkEditView(generic.BulkEditView):
|
||||
queryset = Region.objects.all()
|
||||
# queryset = Region.objects.add_related_count(
|
||||
# Region.objects.all(),
|
||||
# Site,
|
||||
# 'region',
|
||||
# 'site_count',
|
||||
# cumulative=True
|
||||
# )
|
||||
queryset = Region.objects.add_related_count(
|
||||
Region.objects.all(),
|
||||
Site,
|
||||
'region',
|
||||
'site_count',
|
||||
cumulative=True
|
||||
)
|
||||
filterset = filtersets.RegionFilterSet
|
||||
table = tables.RegionTable
|
||||
form = forms.RegionBulkEditForm
|
||||
|
||||
|
||||
class RegionBulkDeleteView(generic.BulkDeleteView):
|
||||
queryset = Region.objects.all()
|
||||
# queryset = Region.objects.add_related_count(
|
||||
# Region.objects.all(),
|
||||
# Site,
|
||||
# 'region',
|
||||
# 'site_count',
|
||||
# cumulative=True
|
||||
# )
|
||||
queryset = Region.objects.add_related_count(
|
||||
Region.objects.all(),
|
||||
Site,
|
||||
'region',
|
||||
'site_count',
|
||||
cumulative=True
|
||||
)
|
||||
filterset = filtersets.RegionFilterSet
|
||||
table = tables.RegionTable
|
||||
|
||||
@ -281,14 +278,13 @@ class RegionContactsView(ObjectContactsView):
|
||||
#
|
||||
|
||||
class SiteGroupListView(generic.ObjectListView):
|
||||
queryset = SiteGroup.objects.all()
|
||||
# queryset = SiteGroup.objects.add_related_count(
|
||||
# SiteGroup.objects.all(),
|
||||
# Site,
|
||||
# 'group',
|
||||
# 'site_count',
|
||||
# cumulative=True
|
||||
# )
|
||||
queryset = SiteGroup.objects.add_related_count(
|
||||
SiteGroup.objects.all(),
|
||||
Site,
|
||||
'group',
|
||||
'site_count',
|
||||
cumulative=True
|
||||
)
|
||||
filterset = filtersets.SiteGroupFilterSet
|
||||
filterset_form = forms.SiteGroupFilterForm
|
||||
table = tables.SiteGroupTable
|
||||
@ -328,28 +324,26 @@ class SiteGroupBulkImportView(generic.BulkImportView):
|
||||
|
||||
|
||||
class SiteGroupBulkEditView(generic.BulkEditView):
|
||||
queryset = SiteGroup.objects.all()
|
||||
# queryset = SiteGroup.objects.add_related_count(
|
||||
# SiteGroup.objects.all(),
|
||||
# Site,
|
||||
# 'group',
|
||||
# 'site_count',
|
||||
# cumulative=True
|
||||
# )
|
||||
queryset = SiteGroup.objects.add_related_count(
|
||||
SiteGroup.objects.all(),
|
||||
Site,
|
||||
'group',
|
||||
'site_count',
|
||||
cumulative=True
|
||||
)
|
||||
filterset = filtersets.SiteGroupFilterSet
|
||||
table = tables.SiteGroupTable
|
||||
form = forms.SiteGroupBulkEditForm
|
||||
|
||||
|
||||
class SiteGroupBulkDeleteView(generic.BulkDeleteView):
|
||||
queryset = SiteGroup.objects.all()
|
||||
# queryset = SiteGroup.objects.add_related_count(
|
||||
# SiteGroup.objects.all(),
|
||||
# Site,
|
||||
# 'group',
|
||||
# 'site_count',
|
||||
# cumulative=True
|
||||
# )
|
||||
queryset = SiteGroup.objects.add_related_count(
|
||||
SiteGroup.objects.all(),
|
||||
Site,
|
||||
'group',
|
||||
'site_count',
|
||||
cumulative=True
|
||||
)
|
||||
filterset = filtersets.SiteGroupFilterSet
|
||||
table = tables.SiteGroupTable
|
||||
|
||||
@ -394,21 +388,20 @@ class SiteView(generic.ObjectView):
|
||||
(Circuit.objects.restrict(request.user, 'view').filter(terminations__site=instance).distinct(), 'site_id'),
|
||||
)
|
||||
|
||||
locations = Location.objects.all().restrict(request.user, 'view').filter(site=instance)
|
||||
# locations = Location.objects.add_related_count(
|
||||
# Location.objects.all(),
|
||||
# Rack,
|
||||
# 'location',
|
||||
# 'rack_count',
|
||||
# cumulative=True
|
||||
# )
|
||||
# locations = Location.objects.add_related_count(
|
||||
# locations,
|
||||
# Device,
|
||||
# 'location',
|
||||
# 'device_count',
|
||||
# cumulative=True
|
||||
# ).restrict(request.user, 'view').filter(site=instance)
|
||||
locations = Location.objects.add_related_count(
|
||||
Location.objects.all(),
|
||||
Rack,
|
||||
'location',
|
||||
'rack_count',
|
||||
cumulative=True
|
||||
)
|
||||
locations = Location.objects.add_related_count(
|
||||
locations,
|
||||
Device,
|
||||
'location',
|
||||
'device_count',
|
||||
cumulative=True
|
||||
).restrict(request.user, 'view').filter(site=instance)
|
||||
|
||||
nonracked_devices = Device.objects.filter(
|
||||
site=instance,
|
||||
@ -463,20 +456,19 @@ class SiteContactsView(ObjectContactsView):
|
||||
#
|
||||
|
||||
class LocationListView(generic.ObjectListView):
|
||||
queryset = Location.objects.all()
|
||||
# queryset = Location.objects.add_related_count(
|
||||
# Location.objects.add_related_count(
|
||||
# Location.objects.all(),
|
||||
# Device,
|
||||
# 'location',
|
||||
# 'device_count',
|
||||
# cumulative=True
|
||||
# ),
|
||||
# Rack,
|
||||
# 'location',
|
||||
# 'rack_count',
|
||||
# cumulative=True
|
||||
# )
|
||||
queryset = Location.objects.add_related_count(
|
||||
Location.objects.add_related_count(
|
||||
Location.objects.all(),
|
||||
Device,
|
||||
'location',
|
||||
'device_count',
|
||||
cumulative=True
|
||||
),
|
||||
Rack,
|
||||
'location',
|
||||
'rack_count',
|
||||
cumulative=True
|
||||
)
|
||||
filterset = filtersets.LocationFilterSet
|
||||
filterset_form = forms.LocationFilterForm
|
||||
table = tables.LocationTable
|
||||
@ -523,28 +515,26 @@ class LocationBulkImportView(generic.BulkImportView):
|
||||
|
||||
|
||||
class LocationBulkEditView(generic.BulkEditView):
|
||||
queryset = Location.objects.all()
|
||||
# queryset = Location.objects.add_related_count(
|
||||
# Location.objects.all(),
|
||||
# Rack,
|
||||
# 'location',
|
||||
# 'rack_count',
|
||||
# cumulative=True
|
||||
# ).prefetch_related('site')
|
||||
queryset = Location.objects.add_related_count(
|
||||
Location.objects.all(),
|
||||
Rack,
|
||||
'location',
|
||||
'rack_count',
|
||||
cumulative=True
|
||||
).prefetch_related('site')
|
||||
filterset = filtersets.LocationFilterSet
|
||||
table = tables.LocationTable
|
||||
form = forms.LocationBulkEditForm
|
||||
|
||||
|
||||
class LocationBulkDeleteView(generic.BulkDeleteView):
|
||||
queryset = Location.objects.all()
|
||||
# queryset = Location.objects.add_related_count(
|
||||
# Location.objects.all(),
|
||||
# Rack,
|
||||
# 'location',
|
||||
# 'rack_count',
|
||||
# cumulative=True
|
||||
# ).prefetch_related('site')
|
||||
queryset = Location.objects.add_related_count(
|
||||
Location.objects.all(),
|
||||
Rack,
|
||||
'location',
|
||||
'rack_count',
|
||||
cumulative=True
|
||||
).prefetch_related('site')
|
||||
filterset = filtersets.LocationFilterSet
|
||||
table = tables.LocationTable
|
||||
|
||||
|
@ -24,14 +24,13 @@ class TenancyRootView(APIRootView):
|
||||
#
|
||||
|
||||
class TenantGroupViewSet(NetBoxModelViewSet):
|
||||
queryset = TenantGroup.objects.all().prefetch_related('tags')
|
||||
# queryset = TenantGroup.objects.add_related_count(
|
||||
# TenantGroup.objects.all(),
|
||||
# Tenant,
|
||||
# 'group',
|
||||
# 'tenant_count',
|
||||
# cumulative=True
|
||||
# ).prefetch_related('tags')
|
||||
queryset = TenantGroup.objects.add_related_count(
|
||||
TenantGroup.objects.all(),
|
||||
Tenant,
|
||||
'group',
|
||||
'tenant_count',
|
||||
cumulative=True
|
||||
).prefetch_related('tags')
|
||||
serializer_class = serializers.TenantGroupSerializer
|
||||
filterset_class = filtersets.TenantGroupFilterSet
|
||||
|
||||
@ -60,14 +59,13 @@ class TenantViewSet(NetBoxModelViewSet):
|
||||
#
|
||||
|
||||
class ContactGroupViewSet(NetBoxModelViewSet):
|
||||
queryset = ContactGroup.objects.all().prefetch_related('tags')
|
||||
# queryset = ContactGroup.objects.add_related_count(
|
||||
# ContactGroup.objects.all(),
|
||||
# Contact,
|
||||
# 'group',
|
||||
# 'contact_count',
|
||||
# cumulative=True
|
||||
# ).prefetch_related('tags')
|
||||
queryset = ContactGroup.objects.add_related_count(
|
||||
ContactGroup.objects.all(),
|
||||
Contact,
|
||||
'group',
|
||||
'contact_count',
|
||||
cumulative=True
|
||||
).prefetch_related('tags')
|
||||
serializer_class = serializers.ContactGroupSerializer
|
||||
filterset_class = filtersets.ContactGroupFilterSet
|
||||
|
||||
|
@ -42,14 +42,13 @@ class ObjectContactsView(generic.ObjectChildrenView):
|
||||
|
||||
|
||||
class TenantGroupListView(generic.ObjectListView):
|
||||
queryset = TenantGroup.objects.all()
|
||||
# queryset = TenantGroup.objects.add_related_count(
|
||||
# TenantGroup.objects.all(),
|
||||
# Tenant,
|
||||
# 'group',
|
||||
# 'tenant_count',
|
||||
# cumulative=True
|
||||
# )
|
||||
queryset = TenantGroup.objects.add_related_count(
|
||||
TenantGroup.objects.all(),
|
||||
Tenant,
|
||||
'group',
|
||||
'tenant_count',
|
||||
cumulative=True
|
||||
)
|
||||
filterset = filtersets.TenantGroupFilterSet
|
||||
filterset_form = forms.TenantGroupFilterForm
|
||||
table = tables.TenantGroupTable
|
||||
@ -87,28 +86,26 @@ class TenantGroupBulkImportView(generic.BulkImportView):
|
||||
|
||||
|
||||
class TenantGroupBulkEditView(generic.BulkEditView):
|
||||
queryset = TenantGroup.objects.all()
|
||||
# queryset = TenantGroup.objects.add_related_count(
|
||||
# TenantGroup.objects.all(),
|
||||
# Tenant,
|
||||
# 'group',
|
||||
# 'tenant_count',
|
||||
# cumulative=True
|
||||
# )
|
||||
queryset = TenantGroup.objects.add_related_count(
|
||||
TenantGroup.objects.all(),
|
||||
Tenant,
|
||||
'group',
|
||||
'tenant_count',
|
||||
cumulative=True
|
||||
)
|
||||
filterset = filtersets.TenantGroupFilterSet
|
||||
table = tables.TenantGroupTable
|
||||
form = forms.TenantGroupBulkEditForm
|
||||
|
||||
|
||||
class TenantGroupBulkDeleteView(generic.BulkDeleteView):
|
||||
queryset = TenantGroup.objects.all()
|
||||
# queryset = TenantGroup.objects.add_related_count(
|
||||
# TenantGroup.objects.all(),
|
||||
# Tenant,
|
||||
# 'group',
|
||||
# 'tenant_count',
|
||||
# cumulative=True
|
||||
# )
|
||||
queryset = TenantGroup.objects.add_related_count(
|
||||
TenantGroup.objects.all(),
|
||||
Tenant,
|
||||
'group',
|
||||
'tenant_count',
|
||||
cumulative=True
|
||||
)
|
||||
filterset = filtersets.TenantGroupFilterSet
|
||||
table = tables.TenantGroupTable
|
||||
|
||||
@ -201,14 +198,13 @@ class TenantContactsView(ObjectContactsView):
|
||||
#
|
||||
|
||||
class ContactGroupListView(generic.ObjectListView):
|
||||
queryset = ContactGroup.objects.all()
|
||||
# queryset = ContactGroup.objects.add_related_count(
|
||||
# ContactGroup.objects.all(),
|
||||
# Contact,
|
||||
# 'group',
|
||||
# 'contact_count',
|
||||
# cumulative=True
|
||||
# )
|
||||
queryset = ContactGroup.objects.add_related_count(
|
||||
ContactGroup.objects.all(),
|
||||
Contact,
|
||||
'group',
|
||||
'contact_count',
|
||||
cumulative=True
|
||||
)
|
||||
filterset = filtersets.ContactGroupFilterSet
|
||||
filterset_form = forms.ContactGroupFilterForm
|
||||
table = tables.ContactGroupTable
|
||||
@ -246,28 +242,26 @@ class ContactGroupBulkImportView(generic.BulkImportView):
|
||||
|
||||
|
||||
class ContactGroupBulkEditView(generic.BulkEditView):
|
||||
queryset = ContactGroup.objects.all()
|
||||
# queryset = ContactGroup.objects.add_related_count(
|
||||
# ContactGroup.objects.all(),
|
||||
# Contact,
|
||||
# 'group',
|
||||
# 'contact_count',
|
||||
# cumulative=True
|
||||
# )
|
||||
queryset = ContactGroup.objects.add_related_count(
|
||||
ContactGroup.objects.all(),
|
||||
Contact,
|
||||
'group',
|
||||
'contact_count',
|
||||
cumulative=True
|
||||
)
|
||||
filterset = filtersets.ContactGroupFilterSet
|
||||
table = tables.ContactGroupTable
|
||||
form = forms.ContactGroupBulkEditForm
|
||||
|
||||
|
||||
class ContactGroupBulkDeleteView(generic.BulkDeleteView):
|
||||
queryset = ContactGroup.objects.all()
|
||||
# queryset = ContactGroup.objects.add_related_count(
|
||||
# ContactGroup.objects.all(),
|
||||
# Contact,
|
||||
# 'group',
|
||||
# 'contact_count',
|
||||
# cumulative=True
|
||||
# )
|
||||
queryset = ContactGroup.objects.add_related_count(
|
||||
ContactGroup.objects.all(),
|
||||
Contact,
|
||||
'group',
|
||||
'contact_count',
|
||||
cumulative=True
|
||||
)
|
||||
filterset = filtersets.ContactGroupFilterSet
|
||||
table = tables.ContactGroupTable
|
||||
|
||||
|
@ -23,3 +23,41 @@ class TreeManager(Manager.from_queryset(TreeQuerySet), TreeManager_):
|
||||
"""
|
||||
|
||||
_with_tree_fields = True
|
||||
|
||||
def add_related_count(
|
||||
self,
|
||||
queryset,
|
||||
rel_model,
|
||||
rel_field,
|
||||
count_attr,
|
||||
cumulative=False,
|
||||
extra_filters={},
|
||||
):
|
||||
"""
|
||||
Adds a related item count to a given ``QuerySet`` using its
|
||||
``extra`` method, for a ``Model`` class which has a relation to
|
||||
this ``Manager``'s ``Model`` class.
|
||||
|
||||
Arguments:
|
||||
|
||||
``rel_model``
|
||||
A ``Model`` class which has a relation to this `Manager``'s
|
||||
``Model`` class.
|
||||
|
||||
``rel_field``
|
||||
The name of the field in ``rel_model`` which holds the
|
||||
relation.
|
||||
|
||||
``count_attr``
|
||||
The name of an attribute which should be added to each item in
|
||||
this ``QuerySet``, containing a count of how many instances
|
||||
of ``rel_model`` are related to it through ``rel_field``.
|
||||
|
||||
``cumulative``
|
||||
If ``True``, the count will be for each item and all of its
|
||||
descendants, otherwise it will be for each item itself.
|
||||
|
||||
``extra_filters``
|
||||
Dict with aditional parameters filtering the related queryset.
|
||||
"""
|
||||
return queryset
|
||||
|
@ -11,14 +11,13 @@ from .models import *
|
||||
#
|
||||
|
||||
class WirelessLANGroupListView(generic.ObjectListView):
|
||||
queryset = WirelessLANGroup.objects.all().prefetch_related('tags')
|
||||
# queryset = WirelessLANGroup.objects.add_related_count(
|
||||
# WirelessLANGroup.objects.all(),
|
||||
# WirelessLAN,
|
||||
# 'group',
|
||||
# 'wirelesslan_count',
|
||||
# cumulative=True
|
||||
# ).prefetch_related('tags')
|
||||
queryset = WirelessLANGroup.objects.add_related_count(
|
||||
WirelessLANGroup.objects.all(),
|
||||
WirelessLAN,
|
||||
'group',
|
||||
'wirelesslan_count',
|
||||
cumulative=True
|
||||
).prefetch_related('tags')
|
||||
filterset = filtersets.WirelessLANGroupFilterSet
|
||||
filterset_form = forms.WirelessLANGroupFilterForm
|
||||
table = tables.WirelessLANGroupTable
|
||||
@ -56,28 +55,26 @@ class WirelessLANGroupBulkImportView(generic.BulkImportView):
|
||||
|
||||
|
||||
class WirelessLANGroupBulkEditView(generic.BulkEditView):
|
||||
queryset = WirelessLANGroup.objects.all()
|
||||
# queryset = WirelessLANGroup.objects.add_related_count(
|
||||
# WirelessLANGroup.objects.all(),
|
||||
# WirelessLAN,
|
||||
# 'group',
|
||||
# 'wirelesslan_count',
|
||||
# cumulative=True
|
||||
# )
|
||||
queryset = WirelessLANGroup.objects.add_related_count(
|
||||
WirelessLANGroup.objects.all(),
|
||||
WirelessLAN,
|
||||
'group',
|
||||
'wirelesslan_count',
|
||||
cumulative=True
|
||||
)
|
||||
filterset = filtersets.WirelessLANGroupFilterSet
|
||||
table = tables.WirelessLANGroupTable
|
||||
form = forms.WirelessLANGroupBulkEditForm
|
||||
|
||||
|
||||
class WirelessLANGroupBulkDeleteView(generic.BulkDeleteView):
|
||||
queryset = WirelessLANGroup.objects.all()
|
||||
# queryset = WirelessLANGroup.objects.add_related_count(
|
||||
# WirelessLANGroup.objects.all(),
|
||||
# WirelessLAN,
|
||||
# 'group',
|
||||
# 'wirelesslan_count',
|
||||
# cumulative=True
|
||||
# )
|
||||
queryset = WirelessLANGroup.objects.add_related_count(
|
||||
WirelessLANGroup.objects.all(),
|
||||
WirelessLAN,
|
||||
'group',
|
||||
'wirelesslan_count',
|
||||
cumulative=True
|
||||
)
|
||||
filterset = filtersets.WirelessLANGroupFilterSet
|
||||
table = tables.WirelessLANGroupTable
|
||||
|
||||
|
Reference in New Issue
Block a user