Coverage for dcim/forms/bulk_create.py: 100%
50 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 18:35 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 18:35 +0000
1from django import forms
2from django.utils.translation import gettext_lazy as _
4from dcim.models import *
5from extras.models import Tag
6from netbox.forms.mixins import ChangelogMessageMixin, CustomFieldsMixin
7from utilities.forms import form_from_model
8from utilities.forms.fields import DynamicModelMultipleChoiceField, ExpandableNameField
9from utilities.forms.mixins import BackgroundJobMixin
11from .object_create import ComponentCreateForm
13__all__ = (
14 'ConsolePortBulkCreateForm',
15 'ConsoleServerPortBulkCreateForm',
16 'CoolingIntakeBulkCreateForm',
17 'CoolingOutflowBulkCreateForm',
18 'DeviceBayBulkCreateForm',
19 # 'FrontPortBulkCreateForm',
20 'InterfaceBulkCreateForm',
21 'InventoryItemBulkCreateForm',
22 'ModuleBayBulkCreateForm',
23 'PowerOutletBulkCreateForm',
24 'PowerPortBulkCreateForm',
25 'RearPortBulkCreateForm',
26)
29#
30# Device components
31#
33class DeviceBulkAddComponentForm(BackgroundJobMixin, ChangelogMessageMixin, CustomFieldsMixin, ComponentCreateForm):
34 pk = forms.ModelMultipleChoiceField(
35 queryset=Device.objects.all(),
36 widget=forms.MultipleHiddenInput()
37 )
38 description = forms.CharField(
39 label=_('Description'),
40 max_length=100,
41 required=False
42 )
43 tags = DynamicModelMultipleChoiceField(
44 label=_('Tags'),
45 queryset=Tag.objects.all(),
46 required=False
47 )
48 replication_fields = ('name', 'label')
51class ConsolePortBulkCreateForm(
52 form_from_model(ConsolePort, ['type', 'speed', 'mark_connected']),
53 DeviceBulkAddComponentForm
54):
55 model = ConsolePort
56 field_order = ('name', 'label', 'type', 'mark_connected', 'description', 'tags')
59class ConsoleServerPortBulkCreateForm(
60 form_from_model(ConsoleServerPort, ['type', 'speed', 'mark_connected']),
61 DeviceBulkAddComponentForm
62):
63 model = ConsoleServerPort
64 field_order = ('name', 'label', 'type', 'speed', 'description', 'tags')
67class PowerPortBulkCreateForm(
68 form_from_model(PowerPort, ['type', 'maximum_draw', 'allocated_draw', 'mark_connected']),
69 DeviceBulkAddComponentForm
70):
71 model = PowerPort
72 field_order = ('name', 'label', 'type', 'maximum_draw', 'allocated_draw', 'description', 'tags')
75class PowerOutletBulkCreateForm(
76 form_from_model(PowerOutlet, ['type', 'status', 'color', 'feed_leg', 'mark_connected']),
77 DeviceBulkAddComponentForm
78):
79 model = PowerOutlet
80 field_order = (
81 'name', 'label', 'type', 'status', 'color', 'feed_leg', 'mark_connected',
82 'description', 'tags',
83 )
86class CoolingIntakeBulkCreateForm(
87 form_from_model(
88 CoolingIntake,
89 [
90 'type', 'diameter', 'diameter_unit', 'max_flow', 'max_flow_unit'
91 ]
92 ),
93 DeviceBulkAddComponentForm
94):
95 model = CoolingIntake
96 field_order = (
97 'name', 'label', 'type', 'diameter', 'diameter_unit', 'max_flow', 'max_flow_unit',
98 'description', 'tags',
99 )
102class CoolingOutflowBulkCreateForm(
103 form_from_model(CoolingOutflow, ['type', 'diameter', 'diameter_unit']),
104 DeviceBulkAddComponentForm
105):
106 model = CoolingOutflow
107 field_order = (
108 'name', 'label', 'type', 'diameter', 'diameter_unit',
109 'description', 'tags',
110 )
113class InterfaceBulkCreateForm(
114 form_from_model(Interface, [
115 'type', 'enabled', 'speed', 'duplex', 'mtu', 'mgmt_only', 'mark_connected', 'poe_mode', 'poe_type', 'rf_role'
116 ]),
117 DeviceBulkAddComponentForm
118):
119 model = Interface
120 field_order = (
121 'name', 'label', 'type', 'enabled', 'speed', 'duplex', 'mtu', 'mgmt_only', 'poe_mode',
122 'poe_type', 'mark_connected', 'rf_role', 'description', 'tags',
123 )
126# class FrontPortBulkCreateForm(
127# form_from_model(FrontPort, ['label', 'type', 'color', 'description', 'tags']),
128# DeviceBulkAddComponentForm
129# ):
130# pass
133class RearPortBulkCreateForm(
134 form_from_model(RearPort, ['type', 'color', 'positions', 'mark_connected']),
135 DeviceBulkAddComponentForm
136):
137 model = RearPort
138 field_order = ('name', 'label', 'type', 'positions', 'mark_connected', 'description', 'tags')
141class ModuleBayBulkCreateForm(
142 form_from_model(ModuleBay, ['enabled']),
143 DeviceBulkAddComponentForm
144):
145 model = ModuleBay
146 field_order = ('name', 'label', 'position', 'enabled', 'description', 'tags')
147 replication_fields = ('name', 'label', 'position')
148 position = ExpandableNameField(
149 label=_('Position'),
150 required=False,
151 help_text=_('Alphanumeric ranges are supported. (Must match the number of names being created.)')
152 )
155class DeviceBayBulkCreateForm(
156 form_from_model(DeviceBay, ['enabled']),
157 DeviceBulkAddComponentForm
158):
159 model = DeviceBay
160 field_order = ('name', 'label', 'enabled', 'description', 'tags')
163class InventoryItemBulkCreateForm(
164 form_from_model(InventoryItem, ['status', 'role', 'manufacturer', 'part_id', 'serial', 'asset_tag', 'discovered']),
165 DeviceBulkAddComponentForm
166):
167 model = InventoryItem
168 field_order = (
169 'name', 'label', 'status', 'role', 'manufacturer', 'part_id', 'serial', 'asset_tag', 'discovered',
170 'description', 'tags',
171 )