bulk_create.py 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. from django import forms
  2. from django.utils.translation import gettext_lazy as _
  3. from dcim.models import *
  4. from extras.models import Tag
  5. from netbox.forms.mixins import ChangelogMessageMixin, CustomFieldsMixin
  6. from utilities.forms import form_from_model
  7. from utilities.forms.fields import DynamicModelMultipleChoiceField, ExpandableNameField
  8. from utilities.forms.mixins import BackgroundJobMixin
  9. from .object_create import ComponentCreateForm
  10. __all__ = (
  11. 'ConsolePortBulkCreateForm',
  12. 'ConsoleServerPortBulkCreateForm',
  13. 'CoolingIntakeBulkCreateForm',
  14. 'CoolingOutflowBulkCreateForm',
  15. 'DeviceBayBulkCreateForm',
  16. # 'FrontPortBulkCreateForm',
  17. 'InterfaceBulkCreateForm',
  18. 'InventoryItemBulkCreateForm',
  19. 'ModuleBayBulkCreateForm',
  20. 'PowerOutletBulkCreateForm',
  21. 'PowerPortBulkCreateForm',
  22. 'RearPortBulkCreateForm',
  23. )
  24. #
  25. # Device components
  26. #
  27. class DeviceBulkAddComponentForm(BackgroundJobMixin, ChangelogMessageMixin, CustomFieldsMixin, ComponentCreateForm):
  28. pk = forms.ModelMultipleChoiceField(
  29. queryset=Device.objects.all(),
  30. widget=forms.MultipleHiddenInput()
  31. )
  32. description = forms.CharField(
  33. label=_('Description'),
  34. max_length=100,
  35. required=False
  36. )
  37. tags = DynamicModelMultipleChoiceField(
  38. label=_('Tags'),
  39. queryset=Tag.objects.all(),
  40. required=False
  41. )
  42. replication_fields = ('name', 'label')
  43. class ConsolePortBulkCreateForm(
  44. form_from_model(ConsolePort, ['type', 'speed', 'mark_connected']),
  45. DeviceBulkAddComponentForm
  46. ):
  47. model = ConsolePort
  48. field_order = ('name', 'label', 'type', 'mark_connected', 'description', 'tags')
  49. class ConsoleServerPortBulkCreateForm(
  50. form_from_model(ConsoleServerPort, ['type', 'speed', 'mark_connected']),
  51. DeviceBulkAddComponentForm
  52. ):
  53. model = ConsoleServerPort
  54. field_order = ('name', 'label', 'type', 'speed', 'description', 'tags')
  55. class PowerPortBulkCreateForm(
  56. form_from_model(PowerPort, ['type', 'maximum_draw', 'allocated_draw', 'mark_connected']),
  57. DeviceBulkAddComponentForm
  58. ):
  59. model = PowerPort
  60. field_order = ('name', 'label', 'type', 'maximum_draw', 'allocated_draw', 'description', 'tags')
  61. class PowerOutletBulkCreateForm(
  62. form_from_model(PowerOutlet, ['type', 'status', 'color', 'feed_leg', 'mark_connected']),
  63. DeviceBulkAddComponentForm
  64. ):
  65. model = PowerOutlet
  66. field_order = (
  67. 'name', 'label', 'type', 'status', 'color', 'feed_leg', 'mark_connected',
  68. 'description', 'tags',
  69. )
  70. class CoolingIntakeBulkCreateForm(
  71. form_from_model(
  72. CoolingIntake,
  73. [
  74. 'type', 'diameter', 'diameter_unit', 'max_flow', 'max_flow_unit'
  75. ]
  76. ),
  77. DeviceBulkAddComponentForm
  78. ):
  79. model = CoolingIntake
  80. field_order = (
  81. 'name', 'label', 'type', 'diameter', 'diameter_unit', 'max_flow', 'max_flow_unit',
  82. 'description', 'tags',
  83. )
  84. class CoolingOutflowBulkCreateForm(
  85. form_from_model(CoolingOutflow, ['type', 'diameter', 'diameter_unit']),
  86. DeviceBulkAddComponentForm
  87. ):
  88. model = CoolingOutflow
  89. field_order = (
  90. 'name', 'label', 'type', 'diameter', 'diameter_unit',
  91. 'description', 'tags',
  92. )
  93. class InterfaceBulkCreateForm(
  94. form_from_model(Interface, [
  95. 'type', 'enabled', 'speed', 'duplex', 'mtu', 'mgmt_only', 'mark_connected', 'poe_mode', 'poe_type', 'rf_role'
  96. ]),
  97. DeviceBulkAddComponentForm
  98. ):
  99. model = Interface
  100. field_order = (
  101. 'name', 'label', 'type', 'enabled', 'speed', 'duplex', 'mtu', 'mgmt_only', 'poe_mode',
  102. 'poe_type', 'mark_connected', 'rf_role', 'description', 'tags',
  103. )
  104. # class FrontPortBulkCreateForm(
  105. # form_from_model(FrontPort, ['label', 'type', 'color', 'description', 'tags']),
  106. # DeviceBulkAddComponentForm
  107. # ):
  108. # pass
  109. class RearPortBulkCreateForm(
  110. form_from_model(RearPort, ['type', 'color', 'positions', 'mark_connected']),
  111. DeviceBulkAddComponentForm
  112. ):
  113. model = RearPort
  114. field_order = ('name', 'label', 'type', 'positions', 'mark_connected', 'description', 'tags')
  115. class ModuleBayBulkCreateForm(
  116. form_from_model(ModuleBay, ['enabled']),
  117. DeviceBulkAddComponentForm
  118. ):
  119. model = ModuleBay
  120. field_order = ('name', 'label', 'position', 'enabled', 'description', 'tags')
  121. replication_fields = ('name', 'label', 'position')
  122. position = ExpandableNameField(
  123. label=_('Position'),
  124. required=False,
  125. help_text=_('Alphanumeric ranges are supported. (Must match the number of names being created.)')
  126. )
  127. class DeviceBayBulkCreateForm(
  128. form_from_model(DeviceBay, ['enabled']),
  129. DeviceBulkAddComponentForm
  130. ):
  131. model = DeviceBay
  132. field_order = ('name', 'label', 'enabled', 'description', 'tags')
  133. class InventoryItemBulkCreateForm(
  134. form_from_model(InventoryItem, ['status', 'role', 'manufacturer', 'part_id', 'serial', 'asset_tag', 'discovered']),
  135. DeviceBulkAddComponentForm
  136. ):
  137. model = InventoryItem
  138. field_order = (
  139. 'name', 'label', 'status', 'role', 'manufacturer', 'part_id', 'serial', 'asset_tag', 'discovered',
  140. 'description', 'tags',
  141. )