Skip to content

Commit 16f5e23

Browse files
Merge pull request #7382 from netbox-community/refactor-forms
Refactor forms
2 parents abb7286 + 13e9d57 commit 16f5e23

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+10481
-10078
lines changed

netbox/circuits/forms.py

Lines changed: 0 additions & 513 deletions
This file was deleted.

netbox/circuits/forms/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
from .bulk_edit import *
2+
from .bulk_import import *
3+
from .filtersets import *
4+
from .models import *

netbox/circuits/forms/bulk_edit.py

Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
from django import forms
2+
3+
from circuits.choices import CircuitStatusChoices
4+
from circuits.models import *
5+
from extras.forms import AddRemoveTagsForm, CustomFieldModelBulkEditForm
6+
from tenancy.models import Tenant
7+
from utilities.forms import (
8+
add_blank_choice, BootstrapMixin, CommentField, DynamicModelChoiceField, SmallTextarea, StaticSelect,
9+
)
10+
11+
__all__ = (
12+
'CircuitBulkEditForm',
13+
'CircuitTypeBulkEditForm',
14+
'ProviderBulkEditForm',
15+
'ProviderNetworkBulkEditForm',
16+
)
17+
18+
19+
class ProviderBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
20+
pk = forms.ModelMultipleChoiceField(
21+
queryset=Provider.objects.all(),
22+
widget=forms.MultipleHiddenInput
23+
)
24+
asn = forms.IntegerField(
25+
required=False,
26+
label='ASN'
27+
)
28+
account = forms.CharField(
29+
max_length=30,
30+
required=False,
31+
label='Account number'
32+
)
33+
portal_url = forms.URLField(
34+
required=False,
35+
label='Portal'
36+
)
37+
noc_contact = forms.CharField(
38+
required=False,
39+
widget=SmallTextarea,
40+
label='NOC contact'
41+
)
42+
admin_contact = forms.CharField(
43+
required=False,
44+
widget=SmallTextarea,
45+
label='Admin contact'
46+
)
47+
comments = CommentField(
48+
widget=SmallTextarea,
49+
label='Comments'
50+
)
51+
52+
class Meta:
53+
nullable_fields = [
54+
'asn', 'account', 'portal_url', 'noc_contact', 'admin_contact', 'comments',
55+
]
56+
57+
58+
class ProviderNetworkBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
59+
pk = forms.ModelMultipleChoiceField(
60+
queryset=ProviderNetwork.objects.all(),
61+
widget=forms.MultipleHiddenInput
62+
)
63+
provider = DynamicModelChoiceField(
64+
queryset=Provider.objects.all(),
65+
required=False
66+
)
67+
description = forms.CharField(
68+
max_length=100,
69+
required=False
70+
)
71+
comments = CommentField(
72+
widget=SmallTextarea,
73+
label='Comments'
74+
)
75+
76+
class Meta:
77+
nullable_fields = [
78+
'description', 'comments',
79+
]
80+
81+
82+
class CircuitTypeBulkEditForm(BootstrapMixin, CustomFieldModelBulkEditForm):
83+
pk = forms.ModelMultipleChoiceField(
84+
queryset=CircuitType.objects.all(),
85+
widget=forms.MultipleHiddenInput
86+
)
87+
description = forms.CharField(
88+
max_length=200,
89+
required=False
90+
)
91+
92+
class Meta:
93+
nullable_fields = ['description']
94+
95+
96+
class CircuitBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
97+
pk = forms.ModelMultipleChoiceField(
98+
queryset=Circuit.objects.all(),
99+
widget=forms.MultipleHiddenInput
100+
)
101+
type = DynamicModelChoiceField(
102+
queryset=CircuitType.objects.all(),
103+
required=False
104+
)
105+
provider = DynamicModelChoiceField(
106+
queryset=Provider.objects.all(),
107+
required=False
108+
)
109+
status = forms.ChoiceField(
110+
choices=add_blank_choice(CircuitStatusChoices),
111+
required=False,
112+
initial='',
113+
widget=StaticSelect()
114+
)
115+
tenant = DynamicModelChoiceField(
116+
queryset=Tenant.objects.all(),
117+
required=False
118+
)
119+
commit_rate = forms.IntegerField(
120+
required=False,
121+
label='Commit rate (Kbps)'
122+
)
123+
description = forms.CharField(
124+
max_length=100,
125+
required=False
126+
)
127+
comments = CommentField(
128+
widget=SmallTextarea,
129+
label='Comments'
130+
)
131+
132+
class Meta:
133+
nullable_fields = [
134+
'tenant', 'commit_rate', 'description', 'comments',
135+
]
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
from circuits.choices import CircuitStatusChoices
2+
from circuits.models import *
3+
from extras.forms import CustomFieldModelCSVForm
4+
from tenancy.models import Tenant
5+
from utilities.forms import CSVChoiceField, CSVModelChoiceField, SlugField
6+
7+
__all__ = (
8+
'CircuitCSVForm',
9+
'CircuitTypeCSVForm',
10+
'ProviderCSVForm',
11+
'ProviderNetworkCSVForm',
12+
)
13+
14+
15+
class ProviderCSVForm(CustomFieldModelCSVForm):
16+
slug = SlugField()
17+
18+
class Meta:
19+
model = Provider
20+
fields = (
21+
'name', 'slug', 'asn', 'account', 'portal_url', 'noc_contact', 'admin_contact', 'comments',
22+
)
23+
24+
25+
class ProviderNetworkCSVForm(CustomFieldModelCSVForm):
26+
provider = CSVModelChoiceField(
27+
queryset=Provider.objects.all(),
28+
to_field_name='name',
29+
help_text='Assigned provider'
30+
)
31+
32+
class Meta:
33+
model = ProviderNetwork
34+
fields = [
35+
'provider', 'name', 'description', 'comments',
36+
]
37+
38+
39+
class CircuitTypeCSVForm(CustomFieldModelCSVForm):
40+
slug = SlugField()
41+
42+
class Meta:
43+
model = CircuitType
44+
fields = ('name', 'slug', 'description')
45+
help_texts = {
46+
'name': 'Name of circuit type',
47+
}
48+
49+
50+
class CircuitCSVForm(CustomFieldModelCSVForm):
51+
provider = CSVModelChoiceField(
52+
queryset=Provider.objects.all(),
53+
to_field_name='name',
54+
help_text='Assigned provider'
55+
)
56+
type = CSVModelChoiceField(
57+
queryset=CircuitType.objects.all(),
58+
to_field_name='name',
59+
help_text='Type of circuit'
60+
)
61+
status = CSVChoiceField(
62+
choices=CircuitStatusChoices,
63+
required=False,
64+
help_text='Operational status'
65+
)
66+
tenant = CSVModelChoiceField(
67+
queryset=Tenant.objects.all(),
68+
required=False,
69+
to_field_name='name',
70+
help_text='Assigned tenant'
71+
)
72+
73+
class Meta:
74+
model = Circuit
75+
fields = [
76+
'cid', 'provider', 'type', 'status', 'tenant', 'install_date', 'commit_rate', 'description', 'comments',
77+
]
Lines changed: 159 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,159 @@
1+
from django import forms
2+
from django.utils.translation import gettext as _
3+
4+
from circuits.choices import CircuitStatusChoices
5+
from circuits.models import *
6+
from dcim.models import Region, Site, SiteGroup
7+
from extras.forms import CustomFieldModelFilterForm
8+
from tenancy.forms import TenancyFilterForm
9+
from utilities.forms import BootstrapMixin, DynamicModelMultipleChoiceField, StaticSelectMultiple, TagFilterField
10+
11+
__all__ = (
12+
'CircuitFilterForm',
13+
'CircuitTypeFilterForm',
14+
'ProviderFilterForm',
15+
'ProviderNetworkFilterForm',
16+
)
17+
18+
19+
class ProviderFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
20+
model = Provider
21+
field_groups = [
22+
['q', 'tag'],
23+
['region_id', 'site_group_id', 'site_id'],
24+
['asn'],
25+
]
26+
q = forms.CharField(
27+
required=False,
28+
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
29+
label=_('Search')
30+
)
31+
region_id = DynamicModelMultipleChoiceField(
32+
queryset=Region.objects.all(),
33+
required=False,
34+
label=_('Region'),
35+
fetch_trigger='open'
36+
)
37+
site_group_id = DynamicModelMultipleChoiceField(
38+
queryset=SiteGroup.objects.all(),
39+
required=False,
40+
label=_('Site group'),
41+
fetch_trigger='open'
42+
)
43+
site_id = DynamicModelMultipleChoiceField(
44+
queryset=Site.objects.all(),
45+
required=False,
46+
query_params={
47+
'region_id': '$region_id',
48+
'site_group_id': '$site_group_id',
49+
},
50+
label=_('Site'),
51+
fetch_trigger='open'
52+
)
53+
asn = forms.IntegerField(
54+
required=False,
55+
label=_('ASN')
56+
)
57+
tag = TagFilterField(model)
58+
59+
60+
class ProviderNetworkFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
61+
model = ProviderNetwork
62+
field_groups = (
63+
('q', 'tag'),
64+
('provider_id',),
65+
)
66+
q = forms.CharField(
67+
required=False,
68+
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
69+
label=_('Search')
70+
)
71+
provider_id = DynamicModelMultipleChoiceField(
72+
queryset=Provider.objects.all(),
73+
required=False,
74+
label=_('Provider'),
75+
fetch_trigger='open'
76+
)
77+
tag = TagFilterField(model)
78+
79+
80+
class CircuitTypeFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
81+
model = CircuitType
82+
field_groups = [
83+
['q'],
84+
]
85+
q = forms.CharField(
86+
required=False,
87+
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
88+
label=_('Search')
89+
)
90+
91+
92+
class CircuitFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldModelFilterForm):
93+
model = Circuit
94+
field_groups = [
95+
['q', 'tag'],
96+
['provider_id', 'provider_network_id'],
97+
['type_id', 'status', 'commit_rate'],
98+
['region_id', 'site_group_id', 'site_id'],
99+
['tenant_group_id', 'tenant_id'],
100+
]
101+
q = forms.CharField(
102+
required=False,
103+
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
104+
label=_('Search')
105+
)
106+
type_id = DynamicModelMultipleChoiceField(
107+
queryset=CircuitType.objects.all(),
108+
required=False,
109+
label=_('Type'),
110+
fetch_trigger='open'
111+
)
112+
provider_id = DynamicModelMultipleChoiceField(
113+
queryset=Provider.objects.all(),
114+
required=False,
115+
label=_('Provider'),
116+
fetch_trigger='open'
117+
)
118+
provider_network_id = DynamicModelMultipleChoiceField(
119+
queryset=ProviderNetwork.objects.all(),
120+
required=False,
121+
query_params={
122+
'provider_id': '$provider_id'
123+
},
124+
label=_('Provider network'),
125+
fetch_trigger='open'
126+
)
127+
status = forms.MultipleChoiceField(
128+
choices=CircuitStatusChoices,
129+
required=False,
130+
widget=StaticSelectMultiple()
131+
)
132+
region_id = DynamicModelMultipleChoiceField(
133+
queryset=Region.objects.all(),
134+
required=False,
135+
label=_('Region'),
136+
fetch_trigger='open'
137+
)
138+
site_group_id = DynamicModelMultipleChoiceField(
139+
queryset=SiteGroup.objects.all(),
140+
required=False,
141+
label=_('Site group'),
142+
fetch_trigger='open'
143+
)
144+
site_id = DynamicModelMultipleChoiceField(
145+
queryset=Site.objects.all(),
146+
required=False,
147+
query_params={
148+
'region_id': '$region_id',
149+
'site_group_id': '$site_group_id',
150+
},
151+
label=_('Site'),
152+
fetch_trigger='open'
153+
)
154+
commit_rate = forms.IntegerField(
155+
required=False,
156+
min_value=0,
157+
label=_('Commit rate (Kbps)')
158+
)
159+
tag = TagFilterField(model)

0 commit comments

Comments
 (0)