object_import.py 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  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. 'ModuleBayTemplateImportForm',
  13. 'ModuleTypeImportForm',
  14. 'PowerOutletTemplateImportForm',
  15. 'PowerPortTemplateImportForm',
  16. 'RearPortTemplateImportForm',
  17. )
  18. class DeviceTypeImportForm(BootstrapMixin, forms.ModelForm):
  19. manufacturer = forms.ModelChoiceField(
  20. queryset=Manufacturer.objects.all(),
  21. to_field_name='name'
  22. )
  23. class Meta:
  24. model = DeviceType
  25. fields = [
  26. 'manufacturer', 'model', 'slug', 'part_number', 'u_height', 'is_full_depth', 'subdevice_role', 'airflow',
  27. 'comments',
  28. ]
  29. class ModuleTypeImportForm(BootstrapMixin, forms.ModelForm):
  30. manufacturer = forms.ModelChoiceField(
  31. queryset=Manufacturer.objects.all(),
  32. to_field_name='name'
  33. )
  34. class Meta:
  35. model = ModuleType
  36. fields = ['manufacturer', 'model', 'part_number', 'comments']
  37. #
  38. # Component template import forms
  39. #
  40. class ComponentTemplateImportForm(BootstrapMixin, forms.ModelForm):
  41. def __init__(self, device_type, data=None, *args, **kwargs):
  42. # Must pass the parent DeviceType on form initialization
  43. data.update({
  44. 'device_type': device_type.pk,
  45. })
  46. super().__init__(data, *args, **kwargs)
  47. def clean_device_type(self):
  48. data = self.cleaned_data['device_type']
  49. # Limit fields referencing other components to the parent DeviceType
  50. for field_name, field in self.fields.items():
  51. if isinstance(field, forms.ModelChoiceField) and field_name != 'device_type':
  52. field.queryset = field.queryset.filter(device_type=data)
  53. return data
  54. class ConsolePortTemplateImportForm(ComponentTemplateImportForm):
  55. class Meta:
  56. model = ConsolePortTemplate
  57. fields = [
  58. 'device_type', 'name', 'label', 'type', 'description',
  59. ]
  60. class ConsoleServerPortTemplateImportForm(ComponentTemplateImportForm):
  61. class Meta:
  62. model = ConsoleServerPortTemplate
  63. fields = [
  64. 'device_type', 'name', 'label', 'type', 'description',
  65. ]
  66. class PowerPortTemplateImportForm(ComponentTemplateImportForm):
  67. class Meta:
  68. model = PowerPortTemplate
  69. fields = [
  70. 'device_type', 'name', 'label', 'type', 'maximum_draw', 'allocated_draw', 'description',
  71. ]
  72. class PowerOutletTemplateImportForm(ComponentTemplateImportForm):
  73. power_port = forms.ModelChoiceField(
  74. queryset=PowerPortTemplate.objects.all(),
  75. to_field_name='name',
  76. required=False
  77. )
  78. class Meta:
  79. model = PowerOutletTemplate
  80. fields = [
  81. 'device_type', 'name', 'label', 'type', 'power_port', 'feed_leg', 'description',
  82. ]
  83. class InterfaceTemplateImportForm(ComponentTemplateImportForm):
  84. type = forms.ChoiceField(
  85. choices=InterfaceTypeChoices.CHOICES
  86. )
  87. class Meta:
  88. model = InterfaceTemplate
  89. fields = [
  90. 'device_type', 'name', 'label', 'type', 'mgmt_only', 'description',
  91. ]
  92. class FrontPortTemplateImportForm(ComponentTemplateImportForm):
  93. type = forms.ChoiceField(
  94. choices=PortTypeChoices.CHOICES
  95. )
  96. rear_port = forms.ModelChoiceField(
  97. queryset=RearPortTemplate.objects.all(),
  98. to_field_name='name'
  99. )
  100. class Meta:
  101. model = FrontPortTemplate
  102. fields = [
  103. 'device_type', 'name', 'type', 'rear_port', 'rear_port_position', 'label', 'description',
  104. ]
  105. class RearPortTemplateImportForm(ComponentTemplateImportForm):
  106. type = forms.ChoiceField(
  107. choices=PortTypeChoices.CHOICES
  108. )
  109. class Meta:
  110. model = RearPortTemplate
  111. fields = [
  112. 'device_type', 'name', 'type', 'positions', 'label', 'description',
  113. ]
  114. class ModuleBayTemplateImportForm(ComponentTemplateImportForm):
  115. class Meta:
  116. model = ModuleBayTemplate
  117. fields = [
  118. 'device_type', 'name', 'label', 'description',
  119. ]
  120. class DeviceBayTemplateImportForm(ComponentTemplateImportForm):
  121. class Meta:
  122. model = DeviceBayTemplate
  123. fields = [
  124. 'device_type', 'name', 'label', 'description',
  125. ]