2
0

models.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. from django import forms
  2. from django.utils.translation import gettext as _
  3. from circuits.models import *
  4. from dcim.models import Region, Site, SiteGroup
  5. from ipam.models import ASN
  6. from netbox.forms import NetBoxModelForm
  7. from tenancy.forms import TenancyForm
  8. from utilities.forms import (
  9. BootstrapMixin, CommentField, DatePicker, DynamicModelChoiceField, DynamicModelMultipleChoiceField,
  10. SelectSpeedWidget, SmallTextarea, SlugField, StaticSelect,
  11. )
  12. __all__ = (
  13. 'CircuitForm',
  14. 'CircuitTerminationForm',
  15. 'CircuitTypeForm',
  16. 'ProviderForm',
  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', 'tags')),
  29. ('Support Info', ('account',)),
  30. )
  31. class Meta:
  32. model = Provider
  33. fields = [
  34. 'name', 'slug', 'account', 'asns', 'comments', 'tags',
  35. ]
  36. help_texts = {
  37. 'name': "Full name of the provider",
  38. }
  39. class ProviderNetworkForm(NetBoxModelForm):
  40. provider = DynamicModelChoiceField(
  41. queryset=Provider.objects.all()
  42. )
  43. comments = CommentField()
  44. fieldsets = (
  45. ('Provider Network', ('provider', 'name', 'service_id', 'description', 'tags')),
  46. )
  47. class Meta:
  48. model = ProviderNetwork
  49. fields = [
  50. 'provider', 'name', 'service_id', 'description', 'comments', 'tags',
  51. ]
  52. class CircuitTypeForm(NetBoxModelForm):
  53. slug = SlugField()
  54. fieldsets = (
  55. ('Circuit Type', (
  56. 'name', 'slug', 'description', 'tags',
  57. )),
  58. )
  59. class Meta:
  60. model = CircuitType
  61. fields = [
  62. 'name', 'slug', 'description', 'tags',
  63. ]
  64. class CircuitForm(TenancyForm, NetBoxModelForm):
  65. provider = DynamicModelChoiceField(
  66. queryset=Provider.objects.all()
  67. )
  68. type = DynamicModelChoiceField(
  69. queryset=CircuitType.objects.all()
  70. )
  71. comments = CommentField()
  72. fieldsets = (
  73. ('Circuit', ('provider', 'cid', 'type', 'status', 'description', 'tags')),
  74. ('Service Parameters', ('install_date', 'termination_date', 'commit_rate')),
  75. ('Tenancy', ('tenant_group', 'tenant')),
  76. )
  77. class Meta:
  78. model = Circuit
  79. fields = [
  80. 'cid', 'type', 'provider', 'status', 'install_date', 'termination_date', 'commit_rate', 'description',
  81. 'tenant_group', 'tenant', 'comments', 'tags',
  82. ]
  83. help_texts = {
  84. 'cid': "Unique circuit ID",
  85. 'commit_rate': "Committed rate",
  86. }
  87. widgets = {
  88. 'status': StaticSelect(),
  89. 'install_date': DatePicker(),
  90. 'termination_date': DatePicker(),
  91. 'commit_rate': SelectSpeedWidget(),
  92. }
  93. class CircuitTerminationForm(NetBoxModelForm):
  94. provider = DynamicModelChoiceField(
  95. queryset=Provider.objects.all(),
  96. required=False,
  97. initial_params={
  98. 'circuits': '$circuit'
  99. }
  100. )
  101. circuit = DynamicModelChoiceField(
  102. queryset=Circuit.objects.all(),
  103. query_params={
  104. 'provider_id': '$provider',
  105. },
  106. )
  107. region = DynamicModelChoiceField(
  108. queryset=Region.objects.all(),
  109. required=False,
  110. initial_params={
  111. 'sites': '$site'
  112. }
  113. )
  114. site_group = DynamicModelChoiceField(
  115. queryset=SiteGroup.objects.all(),
  116. required=False,
  117. initial_params={
  118. 'sites': '$site'
  119. }
  120. )
  121. site = DynamicModelChoiceField(
  122. queryset=Site.objects.all(),
  123. query_params={
  124. 'region_id': '$region',
  125. 'group_id': '$site_group',
  126. },
  127. required=False
  128. )
  129. provider_network = DynamicModelChoiceField(
  130. queryset=ProviderNetwork.objects.all(),
  131. required=False
  132. )
  133. class Meta:
  134. model = CircuitTermination
  135. fields = [
  136. 'provider', 'circuit', 'term_side', 'region', 'site_group', 'site', 'provider_network', 'mark_connected',
  137. 'port_speed', 'upstream_speed', 'xconnect_id', 'pp_info', 'description', 'tags',
  138. ]
  139. help_texts = {
  140. 'port_speed': "Physical circuit speed",
  141. 'xconnect_id': "ID of the local cross-connect",
  142. 'pp_info': "Patch panel ID and port number(s)"
  143. }
  144. widgets = {
  145. 'term_side': StaticSelect(),
  146. 'port_speed': SelectSpeedWidget(),
  147. 'upstream_speed': SelectSpeedWidget(),
  148. }