1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00
2024-03-19 13:34:13 -04:00

184 lines
5.2 KiB
Python

from django.forms import PasswordInput
from django.utils.translation import gettext_lazy as _
from dcim.models import Device, Interface, Location, Site
from ipam.models import VLAN
from netbox.forms import NetBoxModelForm
from tenancy.forms import TenancyForm
from utilities.forms.fields import CommentField, DynamicModelChoiceField, SlugField
from utilities.forms.rendering import FieldSet
from wireless.models import *
__all__ = (
'WirelessLANForm',
'WirelessLANGroupForm',
'WirelessLinkForm',
)
class WirelessLANGroupForm(NetBoxModelForm):
parent = DynamicModelChoiceField(
label=_('Parent'),
queryset=WirelessLANGroup.objects.all(),
required=False
)
slug = SlugField()
fieldsets = (
FieldSet('parent', 'name', 'slug', 'description', 'tags', name=_('Wireless LAN Group')),
)
class Meta:
model = WirelessLANGroup
fields = [
'parent', 'name', 'slug', 'description', 'tags',
]
class WirelessLANForm(TenancyForm, NetBoxModelForm):
group = DynamicModelChoiceField(
label=_('Group'),
queryset=WirelessLANGroup.objects.all(),
required=False
)
vlan = DynamicModelChoiceField(
queryset=VLAN.objects.all(),
required=False,
selector=True,
label=_('VLAN')
)
comments = CommentField()
fieldsets = (
FieldSet('ssid', 'group', 'vlan', 'status', 'description', 'tags', name=_('Wireless LAN')),
FieldSet('tenant_group', 'tenant', name=_('Tenancy')),
FieldSet('auth_type', 'auth_cipher', 'auth_psk', name=_('Authentication')),
)
class Meta:
model = WirelessLAN
fields = [
'ssid', 'group', 'status', 'vlan', 'tenant_group', 'tenant', 'auth_type', 'auth_cipher', 'auth_psk',
'description', 'comments', 'tags',
]
widgets = {
'auth_psk': PasswordInput(
render_value=True,
attrs={'data-toggle': 'password'}
),
}
class WirelessLinkForm(TenancyForm, NetBoxModelForm):
site_a = DynamicModelChoiceField(
queryset=Site.objects.all(),
required=False,
label=_('Site'),
initial_params={
'devices': '$device_a',
}
)
location_a = DynamicModelChoiceField(
queryset=Location.objects.all(),
query_params={
'site_id': '$site_a',
},
required=False,
label=_('Location'),
initial_params={
'devices': '$device_a',
}
)
device_a = DynamicModelChoiceField(
queryset=Device.objects.all(),
query_params={
'site_id': '$site_a',
'location_id': '$location_a',
},
required=False,
label=_('Device'),
initial_params={
'interfaces': '$interface_a'
}
)
interface_a = DynamicModelChoiceField(
queryset=Interface.objects.all(),
query_params={
'kind': 'wireless',
'device_id': '$device_a',
},
context={
'disabled': '_occupied',
},
label=_('Interface')
)
site_b = DynamicModelChoiceField(
queryset=Site.objects.all(),
required=False,
label=_('Site'),
initial_params={
'devices': '$device_b',
}
)
location_b = DynamicModelChoiceField(
queryset=Location.objects.all(),
query_params={
'site_id': '$site_b',
},
required=False,
label=_('Location'),
initial_params={
'devices': '$device_b',
}
)
device_b = DynamicModelChoiceField(
queryset=Device.objects.all(),
query_params={
'site_id': '$site_b',
'location_id': '$location_b',
},
required=False,
label=_('Device'),
initial_params={
'interfaces': '$interface_b'
}
)
interface_b = DynamicModelChoiceField(
queryset=Interface.objects.all(),
query_params={
'kind': 'wireless',
'device_id': '$device_b',
},
context={
'disabled': '_occupied',
},
label=_('Interface')
)
comments = CommentField()
fieldsets = (
FieldSet('site_a', 'location_a', 'device_a', 'interface_a', name=_('Side A')),
FieldSet('site_b', 'location_b', 'device_b', 'interface_b', name=_('Side B')),
FieldSet('status', 'ssid', 'description', 'tags', name=_('Link')),
FieldSet('tenant_group', 'tenant', name=_('Tenancy')),
FieldSet('auth_type', 'auth_cipher', 'auth_psk', name=_('Authentication')),
)
class Meta:
model = WirelessLink
fields = [
'site_a', 'location_a', 'device_a', 'interface_a', 'site_b', 'location_b', 'device_b', 'interface_b',
'status', 'ssid', 'tenant_group', 'tenant', 'auth_type', 'auth_cipher', 'auth_psk', 'description',
'comments', 'tags',
]
widgets = {
'auth_psk': PasswordInput(
render_value=True,
attrs={'data-toggle': 'password'}
),
}
labels = {
'auth_type': 'Type',
'auth_cipher': 'Cipher',
}