object_import.py 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. from django import forms
  2. from dcim.choices import 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. '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', '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. class Meta:
  87. model = InterfaceTemplate
  88. fields = [
  89. 'device_type', 'module_type', 'name', 'label', 'type', 'mgmt_only', 'description',
  90. ]
  91. class FrontPortTemplateImportForm(ComponentTemplateImportForm):
  92. type = forms.ChoiceField(
  93. choices=PortTypeChoices.CHOICES
  94. )
  95. rear_port = forms.ModelChoiceField(
  96. queryset=RearPortTemplate.objects.all(),
  97. to_field_name='name'
  98. )
  99. def clean_device_type(self):
  100. if device_type := self.cleaned_data['device_type']:
  101. rear_port = self.fields['rear_port']
  102. rear_port.queryset = rear_port.queryset.filter(device_type=device_type)
  103. return device_type
  104. def clean_module_type(self):
  105. if module_type := self.cleaned_data['module_type']:
  106. rear_port = self.fields['rear_port']
  107. rear_port.queryset = rear_port.queryset.filter(module_type=module_type)
  108. return module_type
  109. class Meta:
  110. model = FrontPortTemplate
  111. fields = [
  112. 'device_type', 'module_type', 'name', 'type', 'rear_port', 'rear_port_position', 'label', 'description',
  113. ]
  114. class RearPortTemplateImportForm(ComponentTemplateImportForm):
  115. type = forms.ChoiceField(
  116. choices=PortTypeChoices.CHOICES
  117. )
  118. class Meta:
  119. model = RearPortTemplate
  120. fields = [
  121. 'device_type', 'module_type', 'name', 'type', 'positions', 'label', 'description',
  122. ]
  123. class ModuleBayTemplateImportForm(ComponentTemplateImportForm):
  124. class Meta:
  125. model = ModuleBayTemplate
  126. fields = [
  127. 'device_type', 'name', 'label', 'position', 'description',
  128. ]
  129. class DeviceBayTemplateImportForm(ComponentTemplateImportForm):
  130. class Meta:
  131. model = DeviceBayTemplate
  132. fields = [
  133. 'device_type', 'name', 'label', 'description',
  134. ]
  135. class InventoryItemTemplateImportForm(ComponentTemplateImportForm):
  136. parent = forms.ModelChoiceField(
  137. queryset=InventoryItemTemplate.objects.all(),
  138. required=False
  139. )
  140. role = forms.ModelChoiceField(
  141. queryset=InventoryItemRole.objects.all(),
  142. to_field_name='name',
  143. required=False
  144. )
  145. manufacturer = forms.ModelChoiceField(
  146. queryset=Manufacturer.objects.all(),
  147. to_field_name='name',
  148. required=False
  149. )
  150. class Meta:
  151. model = InventoryItemTemplate
  152. fields = [
  153. 'device_type', 'parent', 'name', 'label', 'role', 'manufacturer', 'part_id', 'description',
  154. ]
  155. def clean_device_type(self):
  156. if device_type := self.cleaned_data['device_type']:
  157. parent = self.fields['parent']
  158. parent.queryset = parent.queryset.filter(device_type=device_type)
  159. return device_type
  160. def clean_module_type(self):
  161. if module_type := self.cleaned_data['module_type']:
  162. parent = self.fields['parent']
  163. parent.queryset = parent.queryset.filter(module_type=module_type)
  164. return module_type