mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
Transitioning ipam.Status from model to static field
This commit is contained in:
@ -47,7 +47,7 @@ class PrefixAdmin(admin.ModelAdmin):
|
||||
|
||||
def get_queryset(self, request):
|
||||
qs = super(PrefixAdmin, self).get_queryset(request)
|
||||
return qs.select_related('vrf', 'site', 'status', 'role', 'vlan')
|
||||
return qs.select_related('vrf', 'site', 'role', 'vlan')
|
||||
|
||||
|
||||
@admin.register(IPAddress)
|
||||
@ -71,4 +71,4 @@ class VLANAdmin(admin.ModelAdmin):
|
||||
|
||||
def get_queryset(self, request):
|
||||
qs = super(VLANAdmin, self).get_queryset(request)
|
||||
return qs.select_related('site', 'status', 'role')
|
||||
return qs.select_related('site', 'role')
|
||||
|
@ -69,17 +69,6 @@ class PrefixFilter(django_filters.FilterSet):
|
||||
name='vlan__vid',
|
||||
label='VLAN number (1-4095)',
|
||||
)
|
||||
status_id = django_filters.ModelMultipleChoiceFilter(
|
||||
name='status',
|
||||
queryset=Status.objects.all(),
|
||||
label='Status (ID)',
|
||||
)
|
||||
status = django_filters.ModelMultipleChoiceFilter(
|
||||
name='status',
|
||||
queryset=Status.objects.all(),
|
||||
to_field_name='slug',
|
||||
label='Status (slug)',
|
||||
)
|
||||
role_id = django_filters.ModelMultipleChoiceFilter(
|
||||
name='role',
|
||||
queryset=Role.objects.all(),
|
||||
@ -94,8 +83,7 @@ class PrefixFilter(django_filters.FilterSet):
|
||||
|
||||
class Meta:
|
||||
model = Prefix
|
||||
fields = ['family', 'site_id', 'site', 'vrf_id', 'vrf', 'vlan_id', 'vlan_vid', 'status_id', 'status', 'role_id',
|
||||
'role']
|
||||
fields = ['family', 'site_id', 'site', 'vrf_id', 'vrf', 'vlan_id', 'vlan_vid', 'status', 'role_id', 'role']
|
||||
|
||||
def search(self, queryset, value):
|
||||
value = value.strip()
|
||||
@ -188,17 +176,6 @@ class VLANFilter(django_filters.FilterSet):
|
||||
name='vid',
|
||||
label='VLAN number (1-4095)',
|
||||
)
|
||||
status_id = django_filters.ModelMultipleChoiceFilter(
|
||||
name='status',
|
||||
queryset=Status.objects.all(),
|
||||
label='Status (ID)',
|
||||
)
|
||||
status = django_filters.ModelMultipleChoiceFilter(
|
||||
name='status',
|
||||
queryset=Status.objects.all(),
|
||||
to_field_name='slug',
|
||||
label='Status (slug)',
|
||||
)
|
||||
role_id = django_filters.ModelMultipleChoiceFilter(
|
||||
name='role',
|
||||
queryset=Role.objects.all(),
|
||||
@ -213,4 +190,4 @@ class VLANFilter(django_filters.FilterSet):
|
||||
|
||||
class Meta:
|
||||
model = VLAN
|
||||
fields = ['site_id', 'site', 'vid', 'name', 'status_id', 'status', 'role_id', 'role']
|
||||
fields = ['site_id', 'site', 'vid', 'name', 'status', 'role_id', 'role']
|
||||
|
@ -5,7 +5,8 @@ from django.db.models import Count
|
||||
|
||||
from dcim.models import Site, Device, Interface
|
||||
from utilities.forms import BootstrapMixin, ConfirmationForm, APISelect, Livesearch, CSVDataField, BulkImportForm
|
||||
from .models import VRF, RIR, Aggregate, Role, Status, Prefix, IPAddress, VLAN
|
||||
from .models import VRF, RIR, Aggregate, Role, Status, Prefix, IPAddress, VLAN, PREFIX_STATUS_CHOICES,\
|
||||
VLAN_STATUS_CHOICES
|
||||
|
||||
|
||||
#
|
||||
@ -215,11 +216,6 @@ def prefix_vrf_choices():
|
||||
return vrf_choices
|
||||
|
||||
|
||||
def prefix_status_choices():
|
||||
status_choices = Status.objects.annotate(prefix_count=Count('prefixes'))
|
||||
return [(s.slug, '{} ({})'.format(s.name, s.prefix_count)) for s in status_choices]
|
||||
|
||||
|
||||
def prefix_site_choices():
|
||||
site_choices = Site.objects.annotate(prefix_count=Count('prefixes'))
|
||||
return [(s.slug, '{} ({})'.format(s.name, s.prefix_count)) for s in site_choices]
|
||||
@ -233,7 +229,7 @@ def prefix_role_choices():
|
||||
class PrefixFilterForm(forms.Form, BootstrapMixin):
|
||||
parent = forms.CharField(required=False, label='Search Within')
|
||||
vrf = forms.ChoiceField(required=False, choices=prefix_vrf_choices, label='VRF')
|
||||
status = forms.MultipleChoiceField(required=False, choices=prefix_status_choices)
|
||||
status = forms.MultipleChoiceField(required=False, choices=PREFIX_STATUS_CHOICES)
|
||||
site = forms.MultipleChoiceField(required=False, choices=prefix_site_choices,
|
||||
widget=forms.SelectMultiple(attrs={'size': 8}))
|
||||
role = forms.MultipleChoiceField(required=False, choices=prefix_role_choices,
|
||||
@ -430,11 +426,6 @@ def vlan_site_choices():
|
||||
return [(s.slug, '{} ({})'.format(s.name, s.vlan_count)) for s in site_choices]
|
||||
|
||||
|
||||
def vlan_status_choices():
|
||||
status_choices = Status.objects.annotate(vlan_count=Count('vlans'))
|
||||
return [(s.slug, '{} ({})'.format(s.name, s.vlan_count)) for s in status_choices]
|
||||
|
||||
|
||||
def vlan_role_choices():
|
||||
role_choices = Role.objects.annotate(vlan_count=Count('vlans'))
|
||||
return [(r.slug, '{} ({})'.format(r.name, r.vlan_count)) for r in role_choices]
|
||||
@ -443,6 +434,6 @@ def vlan_role_choices():
|
||||
class VLANFilterForm(forms.Form, BootstrapMixin):
|
||||
site = forms.MultipleChoiceField(required=False, choices=vlan_site_choices,
|
||||
widget=forms.SelectMultiple(attrs={'size': 8}))
|
||||
status = forms.MultipleChoiceField(required=False, choices=vlan_status_choices)
|
||||
status = forms.MultipleChoiceField(required=False, choices=VLAN_STATUS_CHOICES)
|
||||
role = forms.MultipleChoiceField(required=False, choices=vlan_role_choices,
|
||||
widget=forms.SelectMultiple(attrs={'size': 8}))
|
||||
|
25
netbox/ipam/migrations/0003_auto_20160517_2026.py
Normal file
25
netbox/ipam/migrations/0003_auto_20160517_2026.py
Normal file
@ -0,0 +1,25 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.9.5 on 2016-05-17 20:26
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('ipam', '0002_auto_20160517_2007'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='prefix',
|
||||
name='status',
|
||||
field=models.PositiveSmallIntegerField(choices=[(0, b'Container'), (1, b'Active'), (2, b'Reserved'), (3, b'Deprecated')], default=1, verbose_name=b'Status'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='vlan',
|
||||
name='status',
|
||||
field=models.PositiveSmallIntegerField(choices=[(1, b'Active'), (2, b'Reserved'), (3, b'Deprecated')], default=1, verbose_name=b'Status'),
|
||||
),
|
||||
]
|
@ -36,6 +36,13 @@ BOOTSTRAP_CLASS_CHOICES = (
|
||||
(5, 'Danger'),
|
||||
)
|
||||
|
||||
STATUS_CHOICE_CLASSES = {
|
||||
0: 'default',
|
||||
1: 'primary',
|
||||
2: 'info',
|
||||
3: 'danger',
|
||||
}
|
||||
|
||||
|
||||
class VRF(models.Model):
|
||||
"""
|
||||
@ -213,7 +220,7 @@ class Prefix(models.Model):
|
||||
site = models.ForeignKey('dcim.Site', related_name='prefixes', on_delete=models.PROTECT, blank=True, null=True)
|
||||
vrf = models.ForeignKey('VRF', related_name='prefixes', on_delete=models.PROTECT, blank=True, null=True, verbose_name='VRF')
|
||||
vlan = models.ForeignKey('VLAN', related_name='prefixes', on_delete=models.PROTECT, blank=True, null=True, verbose_name='VLAN')
|
||||
status = models.ForeignKey('Status', related_name='prefixes', on_delete=models.PROTECT)
|
||||
status = models.PositiveSmallIntegerField('Status', choices=PREFIX_STATUS_CHOICES, default=1)
|
||||
status_new = models.PositiveSmallIntegerField('Status', choices=PREFIX_STATUS_CHOICES, default=1)
|
||||
role = models.ForeignKey('Role', related_name='prefixes', on_delete=models.SET_NULL, blank=True, null=True)
|
||||
description = models.CharField(max_length=100, blank=True)
|
||||
@ -249,6 +256,9 @@ class Prefix(models.Model):
|
||||
return IPNetwork('{}/{}'.format(self.prefix.network, self.prefix.prefixlen + 1))
|
||||
return None
|
||||
|
||||
def get_status_class(self):
|
||||
return STATUS_CHOICE_CLASSES[self.status]
|
||||
|
||||
|
||||
class IPAddress(models.Model):
|
||||
"""
|
||||
@ -295,7 +305,7 @@ class VLAN(models.Model):
|
||||
MaxValueValidator(4094)
|
||||
])
|
||||
name = models.CharField(max_length=30)
|
||||
status = models.ForeignKey('Status', related_name='vlans', on_delete=models.PROTECT)
|
||||
status = models.PositiveSmallIntegerField('Status', choices=VLAN_STATUS_CHOICES, default=1)
|
||||
status_new = models.PositiveSmallIntegerField('Status', choices=VLAN_STATUS_CHOICES, default=1)
|
||||
role = models.ForeignKey('Role', related_name='vlans', on_delete=models.SET_NULL, blank=True, null=True)
|
||||
|
||||
@ -309,3 +319,6 @@ class VLAN(models.Model):
|
||||
|
||||
def get_absolute_url(self):
|
||||
return reverse('ipam:vlan', args=[self.pk])
|
||||
|
||||
def get_status_class(self):
|
||||
return STATUS_CHOICE_CLASSES[self.status]
|
||||
|
@ -41,7 +41,7 @@ PREFIX_LINK_BRIEF = """
|
||||
|
||||
STATUS_LABEL = """
|
||||
{% if record.pk %}
|
||||
<span class="label label-{{ record.status.get_bootstrap_class_display|lower }}">{{ record.status.name }}</span>
|
||||
<span class="label label-{{ record.get_status_class }}">{{ record.get_status_display }}</span>
|
||||
{% else %}
|
||||
<span class="label label-success">Available</span>
|
||||
{% endif %}
|
||||
|
@ -155,7 +155,7 @@ def aggregate(request, pk):
|
||||
|
||||
# Find all child prefixes contained by this aggregate
|
||||
child_prefixes = Prefix.objects.filter(prefix__net_contained_or_equal=str(aggregate.prefix))\
|
||||
.select_related('site', 'status', 'role').annotate_depth(limit=0)
|
||||
.select_related('site', 'role').annotate_depth(limit=0)
|
||||
child_prefixes = add_available_prefixes(aggregate.prefix, child_prefixes)
|
||||
|
||||
prefix_table = PrefixTable(child_prefixes)
|
||||
@ -248,7 +248,7 @@ class RoleBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
|
||||
#
|
||||
|
||||
class PrefixListView(ObjectListView):
|
||||
queryset = Prefix.objects.select_related('site', 'status', 'role')
|
||||
queryset = Prefix.objects.select_related('site', 'role')
|
||||
filter = PrefixFilter
|
||||
filter_form = PrefixFilterForm
|
||||
table = PrefixTable
|
||||
@ -263,7 +263,7 @@ class PrefixListView(ObjectListView):
|
||||
|
||||
def prefix(request, pk):
|
||||
|
||||
prefix = get_object_or_404(Prefix.objects.select_related('site', 'vlan', 'status', 'role'), pk=pk)
|
||||
prefix = get_object_or_404(Prefix.objects.select_related('site', 'vlan', 'role'), pk=pk)
|
||||
|
||||
try:
|
||||
aggregate = Aggregate.objects.get(prefix__net_contains_or_equals=str(prefix.prefix))
|
||||
@ -275,17 +275,17 @@ def prefix(request, pk):
|
||||
|
||||
# Parent prefixes table
|
||||
parent_prefixes = Prefix.objects.filter(vrf=prefix.vrf, prefix__net_contains=str(prefix.prefix))\
|
||||
.select_related('site', 'status', 'role').annotate_depth()
|
||||
.select_related('site', 'role').annotate_depth()
|
||||
parent_prefix_table = PrefixBriefTable(parent_prefixes)
|
||||
|
||||
# Duplicate prefixes table
|
||||
duplicate_prefixes = Prefix.objects.filter(vrf=prefix.vrf, prefix=str(prefix.prefix)).exclude(pk=prefix.pk)\
|
||||
.select_related('site', 'status', 'role')
|
||||
.select_related('site', 'role')
|
||||
duplicate_prefix_table = PrefixBriefTable(duplicate_prefixes)
|
||||
|
||||
# Child prefixes table
|
||||
child_prefixes = Prefix.objects.filter(vrf=prefix.vrf, prefix__net_contained=str(prefix.prefix))\
|
||||
.select_related('site', 'status', 'role').annotate_depth(limit=0)
|
||||
.select_related('site', 'role').annotate_depth(limit=0)
|
||||
if child_prefixes:
|
||||
child_prefixes = add_available_prefixes(prefix.prefix, child_prefixes)
|
||||
child_prefix_table = PrefixTable(child_prefixes)
|
||||
@ -474,7 +474,7 @@ class IPAddressBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
|
||||
#
|
||||
|
||||
class VLANListView(ObjectListView):
|
||||
queryset = VLAN.objects.select_related('site', 'status', 'role')
|
||||
queryset = VLAN.objects.select_related('site', 'role')
|
||||
filter = VLANFilter
|
||||
filter_form = VLANFilterForm
|
||||
table = VLANTable
|
||||
@ -484,7 +484,7 @@ class VLANListView(ObjectListView):
|
||||
|
||||
def vlan(request, pk):
|
||||
|
||||
vlan = get_object_or_404(VLAN.objects.select_related('site', 'status', 'role'), pk=pk)
|
||||
vlan = get_object_or_404(VLAN.objects.select_related('site', 'role'), pk=pk)
|
||||
prefixes = Prefix.objects.filter(vlan=vlan)
|
||||
|
||||
return render(request, 'ipam/vlan.html', {
|
||||
|
Reference in New Issue
Block a user