mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
Merge branch 'develop' into feature
This commit is contained in:
@@ -297,6 +297,16 @@ class Prefix(PrimaryModel):
|
||||
blank=True
|
||||
)
|
||||
|
||||
# Cached depth & child counts
|
||||
_depth = models.PositiveSmallIntegerField(
|
||||
default=0,
|
||||
editable=False
|
||||
)
|
||||
_children = models.PositiveBigIntegerField(
|
||||
default=0,
|
||||
editable=False
|
||||
)
|
||||
|
||||
objects = PrefixQuerySet.as_manager()
|
||||
|
||||
csv_headers = [
|
||||
@@ -311,6 +321,13 @@ class Prefix(PrimaryModel):
|
||||
ordering = (F('vrf').asc(nulls_first=True), 'prefix', 'pk') # (vrf, prefix) may be non-unique
|
||||
verbose_name_plural = 'prefixes'
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
# Cache the original prefix and VRF so we can check if they have changed on post_save
|
||||
self._prefix = self.prefix
|
||||
self._vrf = self.vrf
|
||||
|
||||
def __str__(self):
|
||||
return str(self.prefix)
|
||||
|
||||
@@ -379,6 +396,14 @@ class Prefix(PrimaryModel):
|
||||
return self.prefix.version
|
||||
return None
|
||||
|
||||
@property
|
||||
def depth(self):
|
||||
return self._depth
|
||||
|
||||
@property
|
||||
def children(self):
|
||||
return self._children
|
||||
|
||||
def _set_prefix_length(self, value):
|
||||
"""
|
||||
Expose the IPNetwork object's prefixlen attribute on the parent model so that it can be manipulated directly,
|
||||
@@ -391,6 +416,26 @@ class Prefix(PrimaryModel):
|
||||
def get_status_class(self):
|
||||
return PrefixStatusChoices.CSS_CLASSES.get(self.status)
|
||||
|
||||
def get_parents(self, include_self=False):
|
||||
"""
|
||||
Return all containing Prefixes in the hierarchy.
|
||||
"""
|
||||
lookup = 'net_contains_or_equals' if include_self else 'net_contains'
|
||||
return Prefix.objects.filter(**{
|
||||
'vrf': self.vrf,
|
||||
f'prefix__{lookup}': self.prefix
|
||||
})
|
||||
|
||||
def get_children(self, include_self=False):
|
||||
"""
|
||||
Return all covered Prefixes in the hierarchy.
|
||||
"""
|
||||
lookup = 'net_contained_or_equal' if include_self else 'net_contained'
|
||||
return Prefix.objects.filter(**{
|
||||
'vrf': self.vrf,
|
||||
f'prefix__{lookup}': self.prefix
|
||||
})
|
||||
|
||||
def get_duplicates(self):
|
||||
return Prefix.objects.filter(vrf=self.vrf, prefix=str(self.prefix)).exclude(pk=self.pk)
|
||||
|
||||
|
Reference in New Issue
Block a user