object_import.py 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. from django import forms
  2. from django.utils.translation import gettext_lazy as _
  3. from dcim.choices import InterfacePoEModeChoices, InterfacePoETypeChoices, InterfaceTypeChoices, PortTypeChoices
  4. from dcim.models import *
  5. from wireless.choices import WirelessRoleChoices
  6. __all__ = (
  7. 'ConsolePortTemplateImportForm',
  8. 'ConsoleServerPortTemplateImportForm',
  9. 'DeviceBayTemplateImportForm',
  10. 'FrontPortTemplateImportForm',
  11. 'InterfaceTemplateImportForm',
  12. 'InventoryItemTemplateImportForm',
  13. 'ModuleBayTemplateImportForm',
  14. 'PortTemplateMappingImportForm',
  15. 'PowerOutletTemplateImportForm',
  16. 'PowerPortTemplateImportForm',
  17. 'RearPortTemplateImportForm',
  18. )
  19. #
  20. # Component template import forms
  21. #
  22. class ConsolePortTemplateImportForm(forms.ModelForm):
  23. class Meta:
  24. model = ConsolePortTemplate
  25. fields = [
  26. 'device_type', 'module_type', 'name', 'label', 'type', 'description',
  27. ]
  28. class ConsoleServerPortTemplateImportForm(forms.ModelForm):
  29. class Meta:
  30. model = ConsoleServerPortTemplate
  31. fields = [
  32. 'device_type', 'module_type', 'name', 'label', 'type', 'description',
  33. ]
  34. class PowerPortTemplateImportForm(forms.ModelForm):
  35. class Meta:
  36. model = PowerPortTemplate
  37. fields = [
  38. 'device_type', 'module_type', 'name', 'label', 'type', 'maximum_draw', 'allocated_draw', 'description',
  39. ]
  40. class PowerOutletTemplateImportForm(forms.ModelForm):
  41. power_port = forms.ModelChoiceField(
  42. label=_('Power port'),
  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(forms.ModelForm):
  63. type = forms.ChoiceField(
  64. label=_('Type'),
  65. choices=InterfaceTypeChoices.CHOICES
  66. )
  67. poe_mode = forms.ChoiceField(
  68. choices=InterfacePoEModeChoices,
  69. required=False,
  70. label=_('PoE mode')
  71. )
  72. poe_type = forms.ChoiceField(
  73. choices=InterfacePoETypeChoices,
  74. required=False,
  75. label=_('PoE type')
  76. )
  77. rf_role = forms.ChoiceField(
  78. choices=WirelessRoleChoices,
  79. required=False,
  80. label=_('Wireless role')
  81. )
  82. class Meta:
  83. model = InterfaceTemplate
  84. fields = [
  85. 'device_type', 'module_type', 'name', 'label', 'type', 'enabled', 'mgmt_only', 'description', 'poe_mode',
  86. 'poe_type', 'rf_role'
  87. ]
  88. class FrontPortTemplateImportForm(forms.ModelForm):
  89. type = forms.ChoiceField(
  90. label=_('Type'),
  91. choices=PortTypeChoices.CHOICES
  92. )
  93. class Meta:
  94. model = FrontPortTemplate
  95. fields = [
  96. 'device_type', 'module_type', 'name', 'type', 'color', 'positions', 'label', 'description',
  97. ]
  98. class RearPortTemplateImportForm(forms.ModelForm):
  99. type = forms.ChoiceField(
  100. label=_('Type'),
  101. choices=PortTypeChoices.CHOICES
  102. )
  103. class Meta:
  104. model = RearPortTemplate
  105. fields = [
  106. 'device_type', 'module_type', 'name', 'type', 'color', 'positions', 'label', 'description',
  107. ]
  108. class PortTemplateMappingImportForm(forms.ModelForm):
  109. front_port = forms.ModelChoiceField(
  110. label=_('Front port'),
  111. queryset=FrontPortTemplate.objects.all(),
  112. to_field_name='name',
  113. )
  114. rear_port = forms.ModelChoiceField(
  115. label=_('Rear port'),
  116. queryset=RearPortTemplate.objects.all(),
  117. to_field_name='name',
  118. )
  119. class Meta:
  120. model = PortTemplateMapping
  121. fields = [
  122. 'front_port', 'front_port_position', 'rear_port', 'rear_port_position',
  123. ]
  124. class ModuleBayTemplateImportForm(forms.ModelForm):
  125. class Meta:
  126. model = ModuleBayTemplate
  127. fields = [
  128. 'device_type', 'module_type', 'name', 'label', 'position', 'description',
  129. ]
  130. class DeviceBayTemplateImportForm(forms.ModelForm):
  131. class Meta:
  132. model = DeviceBayTemplate
  133. fields = [
  134. 'device_type', 'name', 'label', 'description',
  135. ]
  136. class InventoryItemTemplateImportForm(forms.ModelForm):
  137. parent = forms.ModelChoiceField(
  138. label=_('Parent'),
  139. queryset=InventoryItemTemplate.objects.all(),
  140. required=False
  141. )
  142. role = forms.ModelChoiceField(
  143. label=_('Role'),
  144. queryset=InventoryItemRole.objects.all(),
  145. to_field_name='name',
  146. required=False
  147. )
  148. manufacturer = forms.ModelChoiceField(
  149. label=_('Manufacturer'),
  150. queryset=Manufacturer.objects.all(),
  151. to_field_name='name',
  152. required=False
  153. )
  154. class Meta:
  155. model = InventoryItemTemplate
  156. fields = [
  157. 'device_type', 'parent', 'name', 'label', 'role', 'manufacturer', 'part_id', 'description',
  158. ]
  159. def clean_device_type(self):
  160. if device_type := self.cleaned_data['device_type']:
  161. parent = self.fields['parent']
  162. parent.queryset = parent.queryset.filter(device_type=device_type)
  163. return device_type
  164. def clean_module_type(self):
  165. if module_type := self.cleaned_data['module_type']:
  166. parent = self.fields['parent']
  167. parent.queryset = parent.queryset.filter(module_type=module_type)
  168. return module_type