Add status field to WirelessLink

This commit is contained in:
jeremystretch
2021-10-13 14:31:30 -04:00
parent 6ab123e8f4
commit adafa80607
21 changed files with 80 additions and 37 deletions

View File

@@ -1,7 +1,9 @@
from rest_framework import serializers
from dcim.choices import LinkStatusChoices
from dcim.api.serializers import NestedInterfaceSerializer
from ipam.api.serializers import NestedVLANSerializer
from netbox.api import ChoiceField
from netbox.api.serializers import PrimaryModelSerializer
from wireless.models import *
from .nested_serializers import *
@@ -25,11 +27,12 @@ class WirelessLANSerializer(PrimaryModelSerializer):
class WirelessLinkSerializer(PrimaryModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='wireless-api:wirelesslink-detail')
status = ChoiceField(choices=LinkStatusChoices, required=False)
interface_a = NestedInterfaceSerializer()
interface_b = NestedInterfaceSerializer()
class Meta:
model = WirelessLink
fields = [
'id', 'url', 'display', 'interface_a', 'interface_b', 'ssid', 'description',
'id', 'url', 'display', 'interface_a', 'interface_b', 'ssid', 'status', 'description',
]

View File

@@ -1,6 +1,7 @@
import django_filters
from django.db.models import Q
from dcim.choices import LinkStatusChoices
from extras.filters import TagFilter
from netbox.filtersets import PrimaryModelFilterSet
from .models import *
@@ -37,6 +38,9 @@ class WirelessLinkFilterSet(PrimaryModelFilterSet):
method='search',
label='Search',
)
status = django_filters.MultipleChoiceFilter(
choices=LinkStatusChoices
)
tag = TagFilter()
class Meta:

View File

@@ -1,10 +1,11 @@
from django import forms
from dcim.models import *
from dcim.choices import LinkStatusChoices
from extras.forms import AddRemoveTagsForm, CustomFieldModelBulkEditForm
from ipam.models import VLAN
from utilities.forms import BootstrapMixin, DynamicModelChoiceField
from wireless.constants import SSID_MAX_LENGTH
from wireless.models import *
__all__ = (
'WirelessLANBulkEditForm',
@@ -14,7 +15,7 @@ __all__ = (
class WirelessLANBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
pk = forms.ModelMultipleChoiceField(
queryset=PowerFeed.objects.all(),
queryset=WirelessLAN.objects.all(),
widget=forms.MultipleHiddenInput
)
vlan = DynamicModelChoiceField(
@@ -35,13 +36,17 @@ class WirelessLANBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldMode
class WirelessLinkBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
pk = forms.ModelMultipleChoiceField(
queryset=PowerFeed.objects.all(),
queryset=WirelessLink.objects.all(),
widget=forms.MultipleHiddenInput
)
ssid = forms.CharField(
max_length=SSID_MAX_LENGTH,
required=False
)
status = forms.ChoiceField(
choices=LinkStatusChoices,
required=False
)
description = forms.CharField(
required=False
)

View File

@@ -1,7 +1,8 @@
from dcim.choices import LinkStatusChoices
from dcim.models import Interface
from extras.forms import CustomFieldModelCSVForm
from ipam.models import VLAN
from utilities.forms import CSVModelChoiceField
from utilities.forms import CSVChoiceField, CSVModelChoiceField
from wireless.models import *
__all__ = (
@@ -23,6 +24,10 @@ class WirelessLANCSVForm(CustomFieldModelCSVForm):
class WirelessLinkCSVForm(CustomFieldModelCSVForm):
status = CSVChoiceField(
choices=LinkStatusChoices,
help_text='Connection status'
)
interface_a = CSVModelChoiceField(
queryset=Interface.objects.all()
)

View File

@@ -1,8 +1,9 @@
from django import forms
from django.utils.translation import gettext as _
from dcim.choices import LinkStatusChoices
from extras.forms import CustomFieldModelFilterForm
from utilities.forms import BootstrapMixin, TagFilterField
from utilities.forms import add_blank_choice, BootstrapMixin, StaticSelect, TagFilterField
from wireless.models import *
__all__ = (
@@ -42,4 +43,9 @@ class WirelessLinkFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
required=False,
label='SSID'
)
status = forms.ChoiceField(
required=False,
choices=add_blank_choice(LinkStatusChoices),
widget=StaticSelect()
)
tag = TagFilterField(model)

View File

@@ -2,7 +2,7 @@ from dcim.models import Interface
from extras.forms import CustomFieldModelForm
from extras.models import Tag
from ipam.models import VLAN
from utilities.forms import BootstrapMixin, DynamicModelChoiceField, DynamicModelMultipleChoiceField
from utilities.forms import BootstrapMixin, DynamicModelChoiceField, DynamicModelMultipleChoiceField, StaticSelect
from wireless.models import *
__all__ = (
@@ -55,5 +55,8 @@ class WirelessLinkForm(BootstrapMixin, CustomFieldModelForm):
class Meta:
model = WirelessLink
fields = [
'interface_a', 'interface_b', 'ssid', 'description', 'tags',
'interface_a', 'interface_b', 'status', 'ssid', 'description', 'tags',
]
widgets = {
'status': StaticSelect,
}

View File

@@ -42,6 +42,7 @@ class Migration(migrations.Migration):
('custom_field_data', models.JSONField(blank=True, default=dict, encoder=django.core.serializers.json.DjangoJSONEncoder)),
('id', models.BigAutoField(primary_key=True, serialize=False)),
('ssid', models.CharField(blank=True, max_length=32)),
('status', models.CharField(default='connected', max_length=50)),
('description', models.CharField(blank=True, max_length=200)),
('_interface_a_device', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='dcim.device')),
('_interface_b_device', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='dcim.device')),

View File

@@ -2,6 +2,7 @@ from django.core.exceptions import ValidationError
from django.db import models
from django.urls import reverse
from dcim.choices import LinkStatusChoices
from dcim.constants import WIRELESS_IFACE_TYPES
from extras.utils import extras_features
from netbox.models import BigIDModel, PrimaryModel
@@ -70,6 +71,11 @@ class WirelessLink(PrimaryModel):
blank=True,
verbose_name='SSID'
)
status = models.CharField(
max_length=50,
choices=LinkStatusChoices,
default=LinkStatusChoices.STATUS_CONNECTED
)
description = models.CharField(
max_length=200,
blank=True
@@ -94,6 +100,8 @@ class WirelessLink(PrimaryModel):
objects = RestrictedQuerySet.as_manager()
clone_fields = ('ssid', 'status')
class Meta:
ordering = ['pk']
unique_together = ('interface_a', 'interface_b')
@@ -104,6 +112,9 @@ class WirelessLink(PrimaryModel):
def get_absolute_url(self):
return reverse('wireless:wirelesslink', args=[self.pk])
def get_status_class(self):
return LinkStatusChoices.CSS_CLASSES.get(self.status)
def clean(self):
# Validate interface types

View File

@@ -1,7 +1,7 @@
import django_tables2 as tables
from .models import *
from utilities.tables import BaseTable, TagColumn, ToggleColumn
from utilities.tables import BaseTable, ChoiceFieldColumn, TagColumn, ToggleColumn
__all__ = (
'WirelessLANTable',
@@ -30,6 +30,7 @@ class WirelessLinkTable(BaseTable):
linkify=True,
verbose_name='ID'
)
status = ChoiceFieldColumn()
interface_a = tables.Column(
linkify=True
)
@@ -42,5 +43,5 @@ class WirelessLinkTable(BaseTable):
class Meta(BaseTable.Meta):
model = WirelessLink
fields = ('pk', 'id', 'interface_a', 'interface_b', 'ssid', 'description')
default_columns = ('pk', 'id', 'interface_a', 'interface_b', 'ssid', 'description')
fields = ('pk', 'id', 'status', 'interface_a', 'interface_b', 'ssid', 'description')
default_columns = ('pk', 'id', 'status', 'interface_a', 'interface_b', 'ssid', 'description')