diff --git a/python/nav/eventengine/plugins/linkstate.py b/python/nav/eventengine/plugins/linkstate.py index a32aeb5fdd..e7e1fdb38f 100644 --- a/python/nav/eventengine/plugins/linkstate.py +++ b/python/nav/eventengine/plugins/linkstate.py @@ -140,7 +140,7 @@ def _get_target_vlans(self): """ ifc = self.get_target() - vlans = ifc.swportvlan_set.values('vlan__vlan') + vlans = ifc.swport_vlans.values('vlan__vlan') vlans = {row['vlan__vlan'] for row in vlans} return vlans diff --git a/python/nav/models/manage.py b/python/nav/models/manage.py index cd7f6b115e..b1b34e7fe1 100644 --- a/python/nav/models/manage.py +++ b/python/nav/models/manage.py @@ -465,7 +465,7 @@ def get_uplinks(self): result = [] for iface in self.connected_to_interface.all(): - if iface.swportvlan_set.filter(direction=SwPortVlan.DIRECTION_DOWN).count(): + if iface.swport_vlans.filter(direction=SwPortVlan.DIRECTION_DOWN).count(): result.append( { 'other': iface, @@ -1603,9 +1603,17 @@ class SwPortVlan(models.Model): id = models.AutoField(db_column='swportvlanid', primary_key=True) interface = models.ForeignKey( - 'Interface', on_delete=models.CASCADE, db_column='interfaceid' + 'Interface', + on_delete=models.CASCADE, + db_column='interfaceid', + related_name="swport_vlans", + ) + vlan = models.ForeignKey( + 'Vlan', + on_delete=models.CASCADE, + db_column='vlanid', + related_name="swport_vlans", ) - vlan = models.ForeignKey('Vlan', on_delete=models.CASCADE, db_column='vlanid') direction = models.CharField( max_length=1, choices=DIRECTION_CHOICES, default=DIRECTION_UNDEFINED ) @@ -1625,7 +1633,11 @@ class SwPortAllowedVlan(models.Model): """ interface = models.OneToOneField( - 'Interface', on_delete=models.CASCADE, db_column='interfaceid', primary_key=True + 'Interface', + on_delete=models.CASCADE, + db_column='interfaceid', + primary_key=True, + related_name="swport_allowed_vlan", ) hex_string = VarcharField(db_column='hexstring') _cached_hex_string = '' @@ -1680,7 +1692,10 @@ class SwPortBlocked(models.Model): id = models.AutoField(db_column='swportblockedid', primary_key=True) interface = models.ForeignKey( - 'Interface', on_delete=models.CASCADE, db_column='interfaceid' + 'Interface', + on_delete=models.CASCADE, + db_column='interfaceid', + related_name="blocked_swports", ) vlan = models.IntegerField() @@ -1702,22 +1717,30 @@ class AdjacencyCandidate(models.Model): """ id = models.AutoField(db_column='adjacency_candidateid', primary_key=True) - netbox = models.ForeignKey('Netbox', on_delete=models.CASCADE, db_column='netboxid') + netbox = models.ForeignKey( + 'Netbox', + on_delete=models.CASCADE, + db_column='netboxid', + related_name="from_adjancency_candidates", + ) interface = models.ForeignKey( - 'Interface', on_delete=models.CASCADE, db_column='interfaceid' + 'Interface', + on_delete=models.CASCADE, + db_column='interfaceid', + related_name="from_adjancency_candidates", ) to_netbox = models.ForeignKey( 'Netbox', on_delete=models.CASCADE, db_column='to_netboxid', - related_name='to_adjacencycandidate_set', + related_name='to_adjacency_candidates', ) to_interface = models.ForeignKey( 'Interface', on_delete=models.CASCADE, db_column='to_interfaceid', null=True, - related_name='to_adjacencycandidate_set', + related_name='to_adjacency_candidates', ) source = VarcharField() miss_count = models.IntegerField(db_column='misscnt', default=0) @@ -1746,7 +1769,12 @@ class NetboxVtpVlan(models.Model): information.""" id = models.AutoField(primary_key=True) # Serial for faking a primary key - netbox = models.ForeignKey('Netbox', on_delete=models.CASCADE, db_column='netboxid') + netbox = models.ForeignKey( + 'Netbox', + on_delete=models.CASCADE, + db_column='netboxid', + related_name="netbox_vtp_vlans", + ) vtp_vlan = models.IntegerField(db_column='vtpvlan') class Meta(object): @@ -1763,7 +1791,11 @@ class Cam(models.Model): id = models.AutoField(db_column='camid', primary_key=True) netbox = models.ForeignKey( - 'Netbox', on_delete=models.CASCADE, db_column='netboxid', null=True + 'Netbox', + on_delete=models.CASCADE, + db_column='netboxid', + null=True, + related_name="cam_set", ) sysname = VarcharField() ifindex = models.IntegerField() @@ -1915,7 +1947,7 @@ def get_vlan_numbers(self): # XXX: This causes a DB query per port vlans = [ swpv.vlan.vlan - for swpv in self.swportvlan_set.select_related('vlan', 'interface') + for swpv in self.swport_vlans.select_related('vlan', 'interface') ] if self.vlan is not None and self.vlan not in vlans: vlans.append(self.vlan) @@ -1928,7 +1960,7 @@ def get_allowed_vlan_ranges(self): :rtype: nav.util.NumberRange """ try: - allowed = self.swportallowedvlan.get_allowed_vlans() + allowed = self.swport_allowed_vlan.get_allowed_vlans() except SwPortAllowedVlan.DoesNotExist: pass else: @@ -2024,7 +2056,7 @@ def as_range(iterable): return ",".join( as_range(y) for x, y in groupby( - sorted(self.swportallowedvlan.get_allowed_vlans()), + sorted(self.swport_allowed_vlan.get_allowed_vlans()), lambda n, c=count(): n - next(c), ) ) @@ -2092,7 +2124,7 @@ def is_degraded(self): def get_sorted_vlans(self): """Returns a queryset of sorted swportvlans""" - return self.swportvlan_set.select_related('vlan').order_by('vlan__vlan') + return self.swport_vlans.select_related('vlan').order_by('vlan__vlan') def is_on_maintenace(self): """Returns True if the owning Netbox is on maintenance""" diff --git a/python/nav/models/profiles.py b/python/nav/models/profiles.py index bf844f3f38..64a86b4591 100644 --- a/python/nav/models/profiles.py +++ b/python/nav/models/profiles.py @@ -1130,7 +1130,7 @@ class MatchField(models.Model): # Since we need to know how things are connected this has been done manualy FOREIGN_MAP = { ARP: 'netbox__arp', - CAM: 'netbox__cam', + CAM: 'netbox__cam_set', CATEGORY: 'netbox__category', NETBOXGROUP: 'netbox__netboxcategory__category', DEVICE: 'netbox__device', diff --git a/python/nav/portadmin/napalm/juniper.py b/python/nav/portadmin/napalm/juniper.py index 88b495f3e6..455e510cba 100644 --- a/python/nav/portadmin/napalm/juniper.py +++ b/python/nav/portadmin/napalm/juniper.py @@ -205,7 +205,7 @@ def _get_untagged_vlans(self): def get_netbox_vlans(self) -> List[FantasyVlan]: vlan_objects = manage.Vlan.objects.filter( - swportvlan__interface__netbox=self.netbox + swport_vlans__interface__netbox=self.netbox ).distinct() def _make_vlan(vlan): @@ -289,7 +289,7 @@ def _save_access_interface(interface: manage.Interface, access_vlan: int): interface.trunk = False interface.vlan = access_vlan try: - allowedvlans = interface.swportallowedvlan + allowedvlans = interface.swport_allowed_vlan allowedvlans.save() except manage.SwPortAllowedVlan.DoesNotExist: pass diff --git a/python/nav/portadmin/snmp/base.py b/python/nav/portadmin/snmp/base.py index 1cd99cc4d1..dcb550defb 100644 --- a/python/nav/portadmin/snmp/base.py +++ b/python/nav/portadmin/snmp/base.py @@ -399,7 +399,7 @@ def _get_all_interfaces_oper_status(self): def get_netbox_vlans(self): numerical_vlans = self.get_netbox_vlan_tags() vlan_objects = Vlan.objects.filter( - swportvlan__interface__netbox=self.netbox + swport_vlans__interface__netbox=self.netbox ).distinct() vlans = [] for numerical_vlan in numerical_vlans: @@ -548,7 +548,7 @@ def _save_trunk_interface(self, interface, native_vlan, trunk_vlans): @staticmethod def _set_interface_hex(interface, trunk_vlans): try: - allowedvlan = interface.swportallowedvlan + allowedvlan = interface.swport_allowed_vlan except SwPortAllowedVlan.DoesNotExist: allowedvlan = SwPortAllowedVlan(interface=interface) diff --git a/python/nav/topology/detector.py b/python/nav/topology/detector.py index a3bd30d494..7ba48540b5 100644 --- a/python/nav/topology/detector.py +++ b/python/nav/topology/detector.py @@ -143,7 +143,7 @@ def do_vlan_detection(vlans): @with_exception_logging def delete_unused_vlans(): """Deletes vlans unassociated with prefixes or switch ports""" - unused = Vlan.objects.filter(prefix__isnull=True, swportvlan__isnull=True) + unused = Vlan.objects.filter(prefix__isnull=True, swport_vlans__isnull=True) if unused: _logger.info("deleting unused vlans: %r", unused) unused.delete() diff --git a/python/nav/topology/vlan.py b/python/nav/topology/vlan.py index 77ec414815..0022651955 100644 --- a/python/nav/topology/vlan.py +++ b/python/nav/topology/vlan.py @@ -288,8 +288,8 @@ def _ifc_has_vlan(self, ifc): def _vlan_allowed_on_trunk(self, ifc): return ( ifc.trunk - and getattr(ifc, 'swportallowedvlan', None) - and self.vlan.vlan in ifc.swportallowedvlan + and getattr(ifc, 'swport_allowed_vlan', None) + and self.vlan.vlan in ifc.swport_allowed_vlan ) def _is_blocked_on_any_end(self, edge): diff --git a/python/nav/web/ipdevinfo/utils.py b/python/nav/web/ipdevinfo/utils.py index c2a6e1c62c..a1b16803a4 100644 --- a/python/nav/web/ipdevinfo/utils.py +++ b/python/nav/web/ipdevinfo/utils.py @@ -306,7 +306,7 @@ def find_children(netbox, netboxes=None): netboxes = [netbox] interfaces = netbox.interface_set.filter( - to_netbox__isnull=False, swportvlan__direction=SwPortVlan.DIRECTION_DOWN + to_netbox__isnull=False, swport_vlans__direction=SwPortVlan.DIRECTION_DOWN ) for interface in interfaces: if interface.to_netbox not in netboxes: @@ -334,12 +334,12 @@ def find_vlan_organizations(netboxes): for netbox in netboxes: interfaces = netbox.interface_set.filter( to_netbox__isnull=False, - swportvlan__direction=SwPortVlan.DIRECTION_DOWN, - swportvlan__vlan__organization__isnull=False, + swport_vlans__direction=SwPortVlan.DIRECTION_DOWN, + swport_vlans__vlan__organization__isnull=False, ) for interface in interfaces: vlans.extend( - [v.vlan for v in interface.swportvlan_set.exclude(vlan__in=vlans)] + [v.vlan for v in interface.swport_vlans.exclude(vlan__in=vlans)] ) return [v.organization for v in set(vlans) if v.organization] diff --git a/python/nav/web/networkexplorer/mixins.py b/python/nav/web/networkexplorer/mixins.py index 3cf0b18a77..092a64db62 100644 --- a/python/nav/web/networkexplorer/mixins.py +++ b/python/nav/web/networkexplorer/mixins.py @@ -125,11 +125,11 @@ def _get_expandable(gwport): } gwport_prefixes.append(p) - vlans = prefix.prefix.vlan.swportvlan_set.exclude( + vlans = prefix.prefix.vlan.swport_vlans.exclude( vlan__net_type='static' ).filter(interface__netbox=gwport.netbox) for vlan in vlans: - if not vlan.interface.swportblocked_set.filter( + if not vlan.interface.blocked_swports.filter( vlan=vlan.vlan.vlan ).count(): has_children = True @@ -158,7 +158,7 @@ def get_context_data(self, **kwargs): vlans_found = set() for prefix in prefixes: for vlan in ( - prefix.prefix.vlan.swportvlan_set.select_related( + prefix.prefix.vlan.swport_vlans.select_related( 'interface__to_interface__netbox', 'interface__netbox', 'vlan', @@ -168,7 +168,7 @@ def get_context_data(self, **kwargs): ): # Check if port is spanningtreeblocked - if vlan.interface.swportblocked_set.filter( + if vlan.interface.blocked_swports.filter( vlan=vlan.vlan.vlan # really! ).count(): continue diff --git a/python/nav/web/networkexplorer/search.py b/python/nav/web/networkexplorer/search.py index 79a51a290e..a65e3edc05 100644 --- a/python/nav/web/networkexplorer/search.py +++ b/python/nav/web/networkexplorer/search.py @@ -87,7 +87,7 @@ def search_expand_swport(swportid=None, swport=None, scanned=[]): found_gwports = [] # Find gwport that has the same vlan - for swportvlan in swport.swportvlan_set.exclude( + for swportvlan in swport.swport_vlans.exclude( vlan__net_type='static' ).select_related(): for prefix in swportvlan.vlan.prefix_set.all(): diff --git a/python/nav/web/portadmin/views.py b/python/nav/web/portadmin/views.py index 885532a6df..f6f268af87 100644 --- a/python/nav/web/portadmin/views.py +++ b/python/nav/web/portadmin/views.py @@ -292,7 +292,7 @@ def set_voice_vlan_attribute(voice_vlan, interfaces): for interface in interfaces: if not interface.trunk: continue - allowed_vlans = interface.swportallowedvlan.get_allowed_vlans() + allowed_vlans = interface.swport_allowed_vlan.get_allowed_vlans() interface.voice_activated = ( len(allowed_vlans) == 1 and voice_vlan in allowed_vlans )