models.py 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  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. class Meta:
  55. model = CircuitType
  56. fields = [
  57. 'name', 'slug', 'description', 'tags',
  58. ]
  59. class CircuitForm(TenancyForm, NetBoxModelForm):
  60. provider = DynamicModelChoiceField(
  61. queryset=Provider.objects.all()
  62. )
  63. type = DynamicModelChoiceField(
  64. queryset=CircuitType.objects.all()
  65. )
  66. comments = CommentField()
  67. fieldsets = (
  68. ('Circuit', ('provider', 'cid', 'type', 'status', 'description', 'tags')),
  69. ('Service Parameters', ('install_date', 'termination_date', 'commit_rate')),
  70. ('Tenancy', ('tenant_group', 'tenant')),
  71. )
  72. class Meta:
  73. model = Circuit
  74. fields = [
  75. 'cid', 'type', 'provider', 'status', 'install_date', 'termination_date', 'commit_rate', 'description',
  76. 'tenant_group', 'tenant', 'comments', 'tags',
  77. ]
  78. help_texts = {
  79. 'cid': "Unique circuit ID",
  80. 'commit_rate': "Committed rate",
  81. }
  82. widgets = {
  83. 'status': StaticSelect(),
  84. 'install_date': DatePicker(),
  85. 'termination_date': DatePicker(),
  86. 'commit_rate': SelectSpeedWidget(),
  87. }
  88. class CircuitTerminationForm(NetBoxModelForm):
  89. provider = DynamicModelChoiceField(
  90. queryset=Provider.objects.all(),
  91. required=False,
  92. initial_params={
  93. 'circuits': '$circuit'
  94. }
  95. )
  96. circuit = DynamicModelChoiceField(
  97. queryset=Circuit.objects.all(),
  98. query_params={
  99. 'provider_id': '$provider',
  100. },
  101. )
  102. region = DynamicModelChoiceField(
  103. queryset=Region.objects.all(),
  104. required=False,
  105. initial_params={
  106. 'sites': '$site'
  107. }
  108. )
  109. site_group = DynamicModelChoiceField(
  110. queryset=SiteGroup.objects.all(),
  111. required=False,
  112. initial_params={
  113. 'sites': '$site'
  114. }
  115. )
  116. site = DynamicModelChoiceField(
  117. queryset=Site.objects.all(),
  118. query_params={
  119. 'region_id': '$region',
  120. 'group_id': '$site_group',
  121. },
  122. required=False
  123. )
  124. provider_network = DynamicModelChoiceField(
  125. queryset=ProviderNetwork.objects.all(),
  126. required=False
  127. )
  128. class Meta:
  129. model = CircuitTermination
  130. fields = [
  131. 'provider', 'circuit', 'term_side', 'region', 'site_group', 'site', 'provider_network', 'mark_connected',
  132. 'port_speed', 'upstream_speed', 'xconnect_id', 'pp_info', 'description', 'tags',
  133. ]
  134. help_texts = {
  135. 'port_speed': "Physical circuit speed",
  136. 'xconnect_id': "ID of the local cross-connect",
  137. 'pp_info': "Patch panel ID and port number(s)"
  138. }
  139. widgets = {
  140. 'term_side': StaticSelect(),
  141. 'port_speed': SelectSpeedWidget(),
  142. 'upstream_speed': SelectSpeedWidget(),
  143. }