object_import.py 3.9 KB

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