model_forms.py 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  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 TabbedFieldGroups
  10. from utilities.forms.widgets import DatePicker, NumberWithOptions
  11. __all__ = (
  12. 'CircuitForm',
  13. 'CircuitTerminationForm',
  14. 'CircuitTypeForm',
  15. 'ProviderForm',
  16. 'ProviderAccountForm',
  17. 'ProviderNetworkForm',
  18. )
  19. class ProviderForm(NetBoxModelForm):
  20. slug = SlugField()
  21. asns = DynamicModelMultipleChoiceField(
  22. queryset=ASN.objects.all(),
  23. label=_('ASNs'),
  24. required=False
  25. )
  26. comments = CommentField()
  27. fieldsets = (
  28. (_('Provider'), ('name', 'slug', 'asns', 'description', 'tags')),
  29. )
  30. class Meta:
  31. model = Provider
  32. fields = [
  33. 'name', 'slug', 'asns', 'description', 'comments', 'tags',
  34. ]
  35. class ProviderAccountForm(NetBoxModelForm):
  36. provider = DynamicModelChoiceField(
  37. label=_('Provider'),
  38. queryset=Provider.objects.all()
  39. )
  40. comments = CommentField()
  41. class Meta:
  42. model = ProviderAccount
  43. fields = [
  44. 'provider', 'name', 'account', 'description', 'comments', 'tags',
  45. ]
  46. class ProviderNetworkForm(NetBoxModelForm):
  47. provider = DynamicModelChoiceField(
  48. label=_('Provider'),
  49. queryset=Provider.objects.all()
  50. )
  51. comments = CommentField()
  52. fieldsets = (
  53. (_('Provider Network'), ('provider', 'name', 'service_id', 'description', 'tags')),
  54. )
  55. class Meta:
  56. model = ProviderNetwork
  57. fields = [
  58. 'provider', 'name', 'service_id', 'description', 'comments', 'tags',
  59. ]
  60. class CircuitTypeForm(NetBoxModelForm):
  61. slug = SlugField()
  62. fieldsets = (
  63. (_('Circuit Type'), (
  64. 'name', 'slug', 'color', 'description', 'tags',
  65. )),
  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. (_('Circuit'), ('provider', 'provider_account', 'cid', 'type', 'status', 'description', 'tags')),
  92. (_('Service Parameters'), ('install_date', 'termination_date', 'commit_rate')),
  93. (_('Tenancy'), ('tenant_group', 'tenant')),
  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. (_('Circuit Termination'), (
  128. 'circuit',
  129. 'term_side',
  130. 'description',
  131. 'tags',
  132. TabbedFieldGroups(
  133. (_('Site'), 'site'),
  134. (_('Provider Network'), 'provider_network'),
  135. ),
  136. 'mark_connected',
  137. )),
  138. (_('Termination Details'), ('port_speed', 'upstream_speed', 'xconnect_id', 'pp_info')),
  139. )
  140. class Meta:
  141. model = CircuitTermination
  142. fields = [
  143. 'circuit', 'term_side', 'site', 'provider_network', 'mark_connected', 'port_speed', 'upstream_speed',
  144. 'xconnect_id', 'pp_info', 'description', 'tags',
  145. ]
  146. widgets = {
  147. 'port_speed': NumberWithOptions(
  148. options=CircuitTerminationPortSpeedChoices
  149. ),
  150. 'upstream_speed': NumberWithOptions(
  151. options=CircuitTerminationPortSpeedChoices
  152. ),
  153. }