model_forms.py 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. from django.forms import PasswordInput
  2. from django.utils.translation import gettext_lazy as _
  3. from dcim.models import Device, Interface, Location, Site
  4. from ipam.models import VLAN
  5. from netbox.forms import NetBoxModelForm
  6. from tenancy.forms import TenancyForm
  7. from utilities.forms.fields import CommentField, DynamicModelChoiceField, SlugField
  8. from utilities.forms.rendering import FieldSet, InlineFields
  9. from wireless.models import *
  10. __all__ = (
  11. 'WirelessLANForm',
  12. 'WirelessLANGroupForm',
  13. 'WirelessLinkForm',
  14. )
  15. class WirelessLANGroupForm(NetBoxModelForm):
  16. parent = DynamicModelChoiceField(
  17. label=_('Parent'),
  18. queryset=WirelessLANGroup.objects.all(),
  19. required=False
  20. )
  21. slug = SlugField()
  22. fieldsets = (
  23. FieldSet('parent', 'name', 'slug', 'description', 'tags', name=_('Wireless LAN Group')),
  24. )
  25. class Meta:
  26. model = WirelessLANGroup
  27. fields = [
  28. 'parent', 'name', 'slug', 'description', 'tags',
  29. ]
  30. class WirelessLANForm(TenancyForm, NetBoxModelForm):
  31. group = DynamicModelChoiceField(
  32. label=_('Group'),
  33. queryset=WirelessLANGroup.objects.all(),
  34. required=False
  35. )
  36. vlan = DynamicModelChoiceField(
  37. queryset=VLAN.objects.all(),
  38. required=False,
  39. selector=True,
  40. label=_('VLAN')
  41. )
  42. comments = CommentField()
  43. fieldsets = (
  44. FieldSet('ssid', 'group', 'vlan', 'status', 'description', 'tags', name=_('Wireless LAN')),
  45. FieldSet('tenant_group', 'tenant', name=_('Tenancy')),
  46. FieldSet('auth_type', 'auth_cipher', 'auth_psk', name=_('Authentication')),
  47. )
  48. class Meta:
  49. model = WirelessLAN
  50. fields = [
  51. 'ssid', 'group', 'status', 'vlan', 'tenant_group', 'tenant', 'auth_type', 'auth_cipher', 'auth_psk',
  52. 'description', 'comments', 'tags',
  53. ]
  54. widgets = {
  55. 'auth_psk': PasswordInput(
  56. render_value=True,
  57. attrs={'data-toggle': 'password'}
  58. ),
  59. }
  60. class WirelessLinkForm(TenancyForm, NetBoxModelForm):
  61. site_a = DynamicModelChoiceField(
  62. queryset=Site.objects.all(),
  63. required=False,
  64. label=_('Site'),
  65. initial_params={
  66. 'devices': '$device_a',
  67. }
  68. )
  69. location_a = DynamicModelChoiceField(
  70. queryset=Location.objects.all(),
  71. query_params={
  72. 'site_id': '$site_a',
  73. },
  74. required=False,
  75. label=_('Location'),
  76. initial_params={
  77. 'devices': '$device_a',
  78. }
  79. )
  80. device_a = DynamicModelChoiceField(
  81. queryset=Device.objects.all(),
  82. query_params={
  83. 'site_id': '$site_a',
  84. 'location_id': '$location_a',
  85. },
  86. required=False,
  87. label=_('Device'),
  88. initial_params={
  89. 'interfaces': '$interface_a'
  90. }
  91. )
  92. interface_a = DynamicModelChoiceField(
  93. queryset=Interface.objects.all(),
  94. query_params={
  95. 'kind': 'wireless',
  96. 'device_id': '$device_a',
  97. },
  98. context={
  99. 'disabled': '_occupied',
  100. },
  101. label=_('Interface')
  102. )
  103. site_b = DynamicModelChoiceField(
  104. queryset=Site.objects.all(),
  105. required=False,
  106. label=_('Site'),
  107. initial_params={
  108. 'devices': '$device_b',
  109. }
  110. )
  111. location_b = DynamicModelChoiceField(
  112. queryset=Location.objects.all(),
  113. query_params={
  114. 'site_id': '$site_b',
  115. },
  116. required=False,
  117. label=_('Location'),
  118. initial_params={
  119. 'devices': '$device_b',
  120. }
  121. )
  122. device_b = DynamicModelChoiceField(
  123. queryset=Device.objects.all(),
  124. query_params={
  125. 'site_id': '$site_b',
  126. 'location_id': '$location_b',
  127. },
  128. required=False,
  129. label=_('Device'),
  130. initial_params={
  131. 'interfaces': '$interface_b'
  132. }
  133. )
  134. interface_b = DynamicModelChoiceField(
  135. queryset=Interface.objects.all(),
  136. query_params={
  137. 'kind': 'wireless',
  138. 'device_id': '$device_b',
  139. },
  140. context={
  141. 'disabled': '_occupied',
  142. },
  143. label=_('Interface')
  144. )
  145. comments = CommentField()
  146. fieldsets = (
  147. FieldSet('site_a', 'location_a', 'device_a', 'interface_a', name=_('Side A')),
  148. FieldSet('site_b', 'location_b', 'device_b', 'interface_b', name=_('Side B')),
  149. FieldSet(
  150. 'status',
  151. 'ssid',
  152. InlineFields('distance', 'distance_unit', label=_('Distance')),
  153. 'description',
  154. 'tags',
  155. name=_('Link')
  156. ),
  157. FieldSet('tenant_group', 'tenant', name=_('Tenancy')),
  158. FieldSet('auth_type', 'auth_cipher', 'auth_psk', name=_('Authentication')),
  159. )
  160. class Meta:
  161. model = WirelessLink
  162. fields = [
  163. 'site_a', 'location_a', 'device_a', 'interface_a', 'site_b', 'location_b', 'device_b', 'interface_b',
  164. 'status', 'ssid', 'tenant_group', 'tenant', 'auth_type', 'auth_cipher', 'auth_psk',
  165. 'distance', 'distance_unit', 'description', 'comments', 'tags',
  166. ]
  167. widgets = {
  168. 'auth_psk': PasswordInput(
  169. render_value=True,
  170. attrs={'data-toggle': 'password'}
  171. ),
  172. }
  173. labels = {
  174. 'auth_type': 'Type',
  175. 'auth_cipher': 'Cipher',
  176. }