object_import.py 6.5 KB

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