Add devices to WirelessLinkForm

This commit is contained in:
jeremystretch 2021-10-14 10:02:05 -04:00
parent bdf359470e
commit fb9da87abb
3 changed files with 32 additions and 6 deletions

View File

@ -656,6 +656,10 @@ class Interface(ComponentModel, BaseInterface, LinkTermination, PathEndpoint):
"device, or it must be global".format(self.untagged_vlan) "device, or it must be global".format(self.untagged_vlan)
}) })
@property
def _occupied(self):
return super()._occupied or bool(self.wireless_link_id)
@property @property
def is_wired(self): def is_wired(self):
return not self.is_virtual and not self.is_wireless return not self.is_virtual and not self.is_wireless

View File

@ -1,4 +1,4 @@
from dcim.models import Interface from dcim.models import Device, Interface
from extras.forms import CustomFieldModelForm from extras.forms import CustomFieldModelForm
from extras.models import Tag from extras.models import Tag
from ipam.models import VLAN from ipam.models import VLAN
@ -54,18 +54,30 @@ class WirelessLANForm(BootstrapMixin, CustomFieldModelForm):
class WirelessLinkForm(BootstrapMixin, CustomFieldModelForm): class WirelessLinkForm(BootstrapMixin, CustomFieldModelForm):
device_a = DynamicModelChoiceField(
queryset=Device.objects.all(),
label='Device A'
)
interface_a = DynamicModelChoiceField( interface_a = DynamicModelChoiceField(
queryset=Interface.objects.all(), queryset=Interface.objects.all(),
query_params={ query_params={
'kind': 'wireless' 'kind': 'wireless',
'device_id': '$device_a',
}, },
disabled_indicator='_occupied',
label='Interface A' label='Interface A'
) )
device_b = DynamicModelChoiceField(
queryset=Device.objects.all(),
label='Device B'
)
interface_b = DynamicModelChoiceField( interface_b = DynamicModelChoiceField(
queryset=Interface.objects.all(), queryset=Interface.objects.all(),
query_params={ query_params={
'kind': 'wireless' 'kind': 'wireless',
'device_id': '$device_b',
}, },
disabled_indicator='_occupied',
label='Interface B' label='Interface B'
) )
tags = DynamicModelMultipleChoiceField( tags = DynamicModelMultipleChoiceField(
@ -76,7 +88,7 @@ class WirelessLinkForm(BootstrapMixin, CustomFieldModelForm):
class Meta: class Meta:
model = WirelessLink model = WirelessLink
fields = [ fields = [
'interface_a', 'interface_b', 'status', 'ssid', 'description', 'tags', 'device_a', 'interface_a', 'device_b', 'interface_b', 'status', 'ssid', 'description', 'tags',
] ]
widgets = { widgets = {
'status': StaticSelect, 'status': StaticSelect,

View File

@ -74,9 +74,17 @@ class WirelessLinkTable(BaseTable):
verbose_name='ID' verbose_name='ID'
) )
status = ChoiceFieldColumn() status = ChoiceFieldColumn()
device_a = tables.Column(
accessor=tables.A('interface_a__device'),
linkify=True
)
interface_a = tables.Column( interface_a = tables.Column(
linkify=True linkify=True
) )
device_b = tables.Column(
accessor=tables.A('interface_b__device'),
linkify=True
)
interface_b = tables.Column( interface_b = tables.Column(
linkify=True linkify=True
) )
@ -86,5 +94,7 @@ class WirelessLinkTable(BaseTable):
class Meta(BaseTable.Meta): class Meta(BaseTable.Meta):
model = WirelessLink model = WirelessLink
fields = ('pk', 'id', 'status', 'interface_a', 'interface_b', 'ssid', 'description') fields = ('pk', 'id', 'status', 'device_a', 'interface_a', 'device_b', 'interface_b', 'ssid', 'description')
default_columns = ('pk', 'id', 'status', 'interface_a', 'interface_b', 'ssid', 'description') default_columns = (
'pk', 'id', 'status', 'device_a', 'interface_a', 'device_b', 'interface_b', 'ssid', 'description',
)