2
0

model_forms.py 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. from django.utils.translation import gettext_lazy as _
  2. from circuits.choices import CircuitCommitRateChoices, CircuitTerminationPortSpeedChoices
  3. from circuits.models import *
  4. from dcim.models import Site
  5. from ipam.models import ASN
  6. from netbox.forms import NetBoxModelForm
  7. from tenancy.forms import TenancyForm
  8. from utilities.forms.fields import CommentField, DynamicModelChoiceField, DynamicModelMultipleChoiceField, SlugField
  9. from utilities.forms.rendering import FieldSet, TabbedGroups
  10. from utilities.forms.widgets import DatePicker, NumberWithOptions
  11. __all__ = (
  12. 'CircuitForm',
  13. 'CircuitGroupAssignmentForm',
  14. 'CircuitGroupForm',
  15. 'CircuitTerminationForm',
  16. 'CircuitTypeForm',
  17. 'ProviderForm',
  18. 'ProviderAccountForm',
  19. 'ProviderNetworkForm',
  20. )
  21. class ProviderForm(NetBoxModelForm):
  22. slug = SlugField()
  23. asns = DynamicModelMultipleChoiceField(
  24. queryset=ASN.objects.all(),
  25. label=_('ASNs'),
  26. required=False
  27. )
  28. comments = CommentField()
  29. fieldsets = (
  30. FieldSet('name', 'slug', 'asns', 'description', 'tags'),
  31. )
  32. class Meta:
  33. model = Provider
  34. fields = [
  35. 'name', 'slug', 'asns', 'description', 'comments', 'tags',
  36. ]
  37. class ProviderAccountForm(NetBoxModelForm):
  38. provider = DynamicModelChoiceField(
  39. label=_('Provider'),
  40. queryset=Provider.objects.all()
  41. )
  42. comments = CommentField()
  43. class Meta:
  44. model = ProviderAccount
  45. fields = [
  46. 'provider', 'name', 'account', 'description', 'comments', 'tags',
  47. ]
  48. class ProviderNetworkForm(NetBoxModelForm):
  49. provider = DynamicModelChoiceField(
  50. label=_('Provider'),
  51. queryset=Provider.objects.all()
  52. )
  53. comments = CommentField()
  54. fieldsets = (
  55. FieldSet('provider', 'name', 'service_id', 'description', 'tags'),
  56. )
  57. class Meta:
  58. model = ProviderNetwork
  59. fields = [
  60. 'provider', 'name', 'service_id', 'description', 'comments', 'tags',
  61. ]
  62. class CircuitTypeForm(NetBoxModelForm):
  63. slug = SlugField()
  64. fieldsets = (
  65. FieldSet('name', 'slug', 'color', 'description', 'tags'),
  66. )
  67. class Meta:
  68. model = CircuitType
  69. fields = [
  70. 'name', 'slug', 'color', 'description', 'tags',
  71. ]
  72. class CircuitForm(TenancyForm, NetBoxModelForm):
  73. provider = DynamicModelChoiceField(
  74. label=_('Provider'),
  75. queryset=Provider.objects.all(),
  76. selector=True
  77. )
  78. provider_account = DynamicModelChoiceField(
  79. label=_('Provider account'),
  80. queryset=ProviderAccount.objects.all(),
  81. required=False,
  82. query_params={
  83. 'provider_id': '$provider',
  84. }
  85. )
  86. type = DynamicModelChoiceField(
  87. queryset=CircuitType.objects.all()
  88. )
  89. comments = CommentField()
  90. fieldsets = (
  91. FieldSet('provider', 'provider_account', 'cid', 'type', 'status', 'description', 'tags', name=_('Circuit')),
  92. FieldSet('install_date', 'termination_date', 'commit_rate', name=_('Service Parameters')),
  93. FieldSet('tenant_group', 'tenant', name=_('Tenancy')),
  94. )
  95. class Meta:
  96. model = Circuit
  97. fields = [
  98. 'cid', 'type', 'provider', 'provider_account', 'status', 'install_date', 'termination_date', 'commit_rate',
  99. 'description', 'tenant_group', 'tenant', 'comments', 'tags',
  100. ]
  101. widgets = {
  102. 'install_date': DatePicker(),
  103. 'termination_date': DatePicker(),
  104. 'commit_rate': NumberWithOptions(
  105. options=CircuitCommitRateChoices
  106. ),
  107. }
  108. class CircuitTerminationForm(NetBoxModelForm):
  109. circuit = DynamicModelChoiceField(
  110. label=_('Circuit'),
  111. queryset=Circuit.objects.all(),
  112. selector=True
  113. )
  114. site = DynamicModelChoiceField(
  115. label=_('Site'),
  116. queryset=Site.objects.all(),
  117. required=False,
  118. selector=True
  119. )
  120. provider_network = DynamicModelChoiceField(
  121. label=_('Provider network'),
  122. queryset=ProviderNetwork.objects.all(),
  123. required=False,
  124. selector=True
  125. )
  126. fieldsets = (
  127. FieldSet(
  128. 'circuit', 'term_side', 'description', 'tags',
  129. TabbedGroups(
  130. FieldSet('site', name=_('Site')),
  131. FieldSet('provider_network', name=_('Provider Network')),
  132. ),
  133. 'mark_connected', name=_('Circuit Termination')
  134. ),
  135. FieldSet('port_speed', 'upstream_speed', 'xconnect_id', 'pp_info', name=_('Termination Details')),
  136. )
  137. class Meta:
  138. model = CircuitTermination
  139. fields = [
  140. 'circuit', 'term_side', 'site', 'provider_network', 'mark_connected', 'port_speed', 'upstream_speed',
  141. 'xconnect_id', 'pp_info', 'description', 'tags',
  142. ]
  143. widgets = {
  144. 'port_speed': NumberWithOptions(
  145. options=CircuitTerminationPortSpeedChoices
  146. ),
  147. 'upstream_speed': NumberWithOptions(
  148. options=CircuitTerminationPortSpeedChoices
  149. ),
  150. }
  151. class CircuitGroupForm(TenancyForm, NetBoxModelForm):
  152. slug = SlugField()
  153. fieldsets = (
  154. FieldSet('name', 'slug', 'description', 'tags', name=_('Circuit Group')),
  155. FieldSet('tenant_group', 'tenant', name=_('Tenancy')),
  156. )
  157. class Meta:
  158. model = CircuitGroup
  159. fields = [
  160. 'name', 'slug', 'description', 'tenant_group', 'tenant', 'tags',
  161. ]
  162. class CircuitGroupAssignmentForm(NetBoxModelForm):
  163. group = DynamicModelChoiceField(
  164. label=_('Group'),
  165. queryset=CircuitGroup.objects.all(),
  166. )
  167. circuit = DynamicModelChoiceField(
  168. label=_('Circuit'),
  169. queryset=Circuit.objects.all(),
  170. )
  171. class Meta:
  172. model = CircuitGroupAssignment
  173. fields = [
  174. 'group', 'circuit', 'priority', 'tags',
  175. ]