object_import.py 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. from django import forms
  2. from django.utils.translation import gettext as _
  3. from dcim.choices import InterfacePoEModeChoices, InterfacePoETypeChoices, InterfaceTypeChoices, PortTypeChoices
  4. from dcim.models import *
  5. from utilities.forms import BootstrapMixin
  6. __all__ = (
  7. 'ConsolePortTemplateImportForm',
  8. 'ConsoleServerPortTemplateImportForm',
  9. 'DeviceBayTemplateImportForm',
  10. 'FrontPortTemplateImportForm',
  11. 'InterfaceTemplateImportForm',
  12. 'InventoryItemTemplateImportForm',
  13. 'ModuleBayTemplateImportForm',
  14. 'PowerOutletTemplateImportForm',
  15. 'PowerPortTemplateImportForm',
  16. 'RearPortTemplateImportForm',
  17. )
  18. #
  19. # Component template import forms
  20. #
  21. class ComponentTemplateImportForm(BootstrapMixin, forms.ModelForm):
  22. pass
  23. class ConsolePortTemplateImportForm(ComponentTemplateImportForm):
  24. class Meta:
  25. model = ConsolePortTemplate
  26. fields = [
  27. 'device_type', 'module_type', 'name', 'label', 'type', 'description',
  28. ]
  29. class ConsoleServerPortTemplateImportForm(ComponentTemplateImportForm):
  30. class Meta:
  31. model = ConsoleServerPortTemplate
  32. fields = [
  33. 'device_type', 'module_type', 'name', 'label', 'type', 'description',
  34. ]
  35. class PowerPortTemplateImportForm(ComponentTemplateImportForm):
  36. class Meta:
  37. model = PowerPortTemplate
  38. fields = [
  39. 'device_type', 'module_type', 'name', 'label', 'type', 'maximum_draw', 'allocated_draw', 'description',
  40. ]
  41. class PowerOutletTemplateImportForm(ComponentTemplateImportForm):
  42. power_port = forms.ModelChoiceField(
  43. queryset=PowerPortTemplate.objects.all(),
  44. to_field_name='name',
  45. required=False
  46. )
  47. class Meta:
  48. model = PowerOutletTemplate
  49. fields = [
  50. 'device_type', 'module_type', 'name', 'label', 'type', 'power_port', 'feed_leg', 'description',
  51. ]
  52. def clean_device_type(self):
  53. if device_type := self.cleaned_data['device_type']:
  54. power_port = self.fields['power_port']
  55. power_port.queryset = power_port.queryset.filter(device_type=device_type)
  56. return device_type
  57. def clean_module_type(self):
  58. if module_type := self.cleaned_data['module_type']:
  59. power_port = self.fields['power_port']
  60. power_port.queryset = power_port.queryset.filter(module_type=module_type)
  61. return module_type
  62. class InterfaceTemplateImportForm(ComponentTemplateImportForm):
  63. type = forms.ChoiceField(
  64. choices=InterfaceTypeChoices.CHOICES
  65. )
  66. poe_mode = forms.ChoiceField(
  67. choices=InterfacePoEModeChoices,
  68. required=False,
  69. label=_('PoE mode')
  70. )
  71. poe_type = forms.ChoiceField(
  72. choices=InterfacePoETypeChoices,
  73. required=False,
  74. label=_('PoE type')
  75. )
  76. class Meta:
  77. model = InterfaceTemplate
  78. fields = [
  79. 'device_type', 'module_type', 'name', 'label', 'type', 'enabled', 'mgmt_only', 'description', 'poe_mode', 'poe_type',
  80. ]
  81. class FrontPortTemplateImportForm(ComponentTemplateImportForm):
  82. type = forms.ChoiceField(
  83. choices=PortTypeChoices.CHOICES
  84. )
  85. rear_port = forms.ModelChoiceField(
  86. queryset=RearPortTemplate.objects.all(),
  87. to_field_name='name'
  88. )
  89. def clean_device_type(self):
  90. if device_type := self.cleaned_data['device_type']:
  91. rear_port = self.fields['rear_port']
  92. rear_port.queryset = rear_port.queryset.filter(device_type=device_type)
  93. return device_type
  94. def clean_module_type(self):
  95. if module_type := self.cleaned_data['module_type']:
  96. rear_port = self.fields['rear_port']
  97. rear_port.queryset = rear_port.queryset.filter(module_type=module_type)
  98. return module_type
  99. class Meta:
  100. model = FrontPortTemplate
  101. fields = [
  102. 'device_type', 'module_type', 'name', 'type', 'color', 'rear_port', 'rear_port_position', 'label', 'description',
  103. ]
  104. class RearPortTemplateImportForm(ComponentTemplateImportForm):
  105. type = forms.ChoiceField(
  106. choices=PortTypeChoices.CHOICES
  107. )
  108. class Meta:
  109. model = RearPortTemplate
  110. fields = [
  111. 'device_type', 'module_type', 'name', 'type', 'color', 'positions', 'label', 'description',
  112. ]
  113. class ModuleBayTemplateImportForm(ComponentTemplateImportForm):
  114. class Meta:
  115. model = ModuleBayTemplate
  116. fields = [
  117. 'device_type', 'name', 'label', 'position', 'description',
  118. ]
  119. class DeviceBayTemplateImportForm(ComponentTemplateImportForm):
  120. class Meta:
  121. model = DeviceBayTemplate
  122. fields = [
  123. 'device_type', 'name', 'label', 'description',
  124. ]
  125. class InventoryItemTemplateImportForm(ComponentTemplateImportForm):
  126. parent = forms.ModelChoiceField(
  127. queryset=InventoryItemTemplate.objects.all(),
  128. required=False
  129. )
  130. role = forms.ModelChoiceField(
  131. queryset=InventoryItemRole.objects.all(),
  132. to_field_name='name',
  133. required=False
  134. )
  135. manufacturer = forms.ModelChoiceField(
  136. queryset=Manufacturer.objects.all(),
  137. to_field_name='name',
  138. required=False
  139. )
  140. class Meta:
  141. model = InventoryItemTemplate
  142. fields = [
  143. 'device_type', 'parent', 'name', 'label', 'role', 'manufacturer', 'part_id', 'description',
  144. ]
  145. def clean_device_type(self):
  146. if device_type := self.cleaned_data['device_type']:
  147. parent = self.fields['parent']
  148. parent.queryset = parent.queryset.filter(device_type=device_type)
  149. return device_type
  150. def clean_module_type(self):
  151. if module_type := self.cleaned_data['module_type']:
  152. parent = self.fields['parent']
  153. parent.queryset = parent.queryset.filter(module_type=module_type)
  154. return module_type