mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
Refactor tenancy forms
This commit is contained in:
@ -1,196 +0,0 @@
|
|||||||
from django import forms
|
|
||||||
from django.utils.translation import gettext as _
|
|
||||||
|
|
||||||
from extras.forms import (
|
|
||||||
AddRemoveTagsForm, CustomFieldModelForm, CustomFieldModelBulkEditForm, CustomFieldModelFilterForm, CustomFieldModelCSVForm,
|
|
||||||
)
|
|
||||||
from extras.models import Tag
|
|
||||||
from utilities.forms import (
|
|
||||||
BootstrapMixin, CommentField, CSVModelChoiceField, DynamicModelChoiceField, DynamicModelMultipleChoiceField,
|
|
||||||
SlugField, TagFilterField,
|
|
||||||
)
|
|
||||||
from .models import Tenant, TenantGroup
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# Tenant groups
|
|
||||||
#
|
|
||||||
|
|
||||||
class TenantGroupForm(BootstrapMixin, CustomFieldModelForm):
|
|
||||||
parent = DynamicModelChoiceField(
|
|
||||||
queryset=TenantGroup.objects.all(),
|
|
||||||
required=False
|
|
||||||
)
|
|
||||||
slug = SlugField()
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
model = TenantGroup
|
|
||||||
fields = [
|
|
||||||
'parent', 'name', 'slug', 'description',
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
class TenantGroupCSVForm(CustomFieldModelCSVForm):
|
|
||||||
parent = CSVModelChoiceField(
|
|
||||||
queryset=TenantGroup.objects.all(),
|
|
||||||
required=False,
|
|
||||||
to_field_name='name',
|
|
||||||
help_text='Parent group'
|
|
||||||
)
|
|
||||||
slug = SlugField()
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
model = TenantGroup
|
|
||||||
fields = ('name', 'slug', 'parent', 'description')
|
|
||||||
|
|
||||||
|
|
||||||
class TenantGroupBulkEditForm(BootstrapMixin, CustomFieldModelBulkEditForm):
|
|
||||||
pk = forms.ModelMultipleChoiceField(
|
|
||||||
queryset=TenantGroup.objects.all(),
|
|
||||||
widget=forms.MultipleHiddenInput
|
|
||||||
)
|
|
||||||
parent = DynamicModelChoiceField(
|
|
||||||
queryset=TenantGroup.objects.all(),
|
|
||||||
required=False
|
|
||||||
)
|
|
||||||
description = forms.CharField(
|
|
||||||
max_length=200,
|
|
||||||
required=False
|
|
||||||
)
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
nullable_fields = ['parent', 'description']
|
|
||||||
|
|
||||||
|
|
||||||
class TenantGroupFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
|
|
||||||
model = TenantGroup
|
|
||||||
q = forms.CharField(
|
|
||||||
required=False,
|
|
||||||
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
|
|
||||||
label=_('Search')
|
|
||||||
)
|
|
||||||
parent_id = DynamicModelMultipleChoiceField(
|
|
||||||
queryset=TenantGroup.objects.all(),
|
|
||||||
required=False,
|
|
||||||
label=_('Parent group'),
|
|
||||||
fetch_trigger='open'
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# Tenants
|
|
||||||
#
|
|
||||||
|
|
||||||
class TenantForm(BootstrapMixin, CustomFieldModelForm):
|
|
||||||
slug = SlugField()
|
|
||||||
group = DynamicModelChoiceField(
|
|
||||||
queryset=TenantGroup.objects.all(),
|
|
||||||
required=False
|
|
||||||
)
|
|
||||||
comments = CommentField()
|
|
||||||
tags = DynamicModelMultipleChoiceField(
|
|
||||||
queryset=Tag.objects.all(),
|
|
||||||
required=False
|
|
||||||
)
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
model = Tenant
|
|
||||||
fields = (
|
|
||||||
'name', 'slug', 'group', 'description', 'comments', 'tags',
|
|
||||||
)
|
|
||||||
fieldsets = (
|
|
||||||
('Tenant', ('name', 'slug', 'group', 'description', 'tags')),
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class TenantCSVForm(CustomFieldModelCSVForm):
|
|
||||||
slug = SlugField()
|
|
||||||
group = CSVModelChoiceField(
|
|
||||||
queryset=TenantGroup.objects.all(),
|
|
||||||
required=False,
|
|
||||||
to_field_name='name',
|
|
||||||
help_text='Assigned group'
|
|
||||||
)
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
model = Tenant
|
|
||||||
fields = ('name', 'slug', 'group', 'description', 'comments')
|
|
||||||
|
|
||||||
|
|
||||||
class TenantBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
|
|
||||||
pk = forms.ModelMultipleChoiceField(
|
|
||||||
queryset=Tenant.objects.all(),
|
|
||||||
widget=forms.MultipleHiddenInput()
|
|
||||||
)
|
|
||||||
group = DynamicModelChoiceField(
|
|
||||||
queryset=TenantGroup.objects.all(),
|
|
||||||
required=False
|
|
||||||
)
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
nullable_fields = [
|
|
||||||
'group',
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
class TenantFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
|
|
||||||
model = Tenant
|
|
||||||
field_groups = (
|
|
||||||
('q', 'tag'),
|
|
||||||
('group_id',),
|
|
||||||
)
|
|
||||||
q = forms.CharField(
|
|
||||||
required=False,
|
|
||||||
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
|
|
||||||
label=_('Search')
|
|
||||||
)
|
|
||||||
group_id = DynamicModelMultipleChoiceField(
|
|
||||||
queryset=TenantGroup.objects.all(),
|
|
||||||
required=False,
|
|
||||||
null_option='None',
|
|
||||||
label=_('Group'),
|
|
||||||
fetch_trigger='open'
|
|
||||||
)
|
|
||||||
tag = TagFilterField(model)
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# Form extensions
|
|
||||||
#
|
|
||||||
|
|
||||||
class TenancyForm(forms.Form):
|
|
||||||
tenant_group = DynamicModelChoiceField(
|
|
||||||
queryset=TenantGroup.objects.all(),
|
|
||||||
required=False,
|
|
||||||
null_option='None',
|
|
||||||
initial_params={
|
|
||||||
'tenants': '$tenant'
|
|
||||||
}
|
|
||||||
)
|
|
||||||
tenant = DynamicModelChoiceField(
|
|
||||||
queryset=Tenant.objects.all(),
|
|
||||||
required=False,
|
|
||||||
query_params={
|
|
||||||
'group_id': '$tenant_group'
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class TenancyFilterForm(forms.Form):
|
|
||||||
tenant_group_id = DynamicModelMultipleChoiceField(
|
|
||||||
queryset=TenantGroup.objects.all(),
|
|
||||||
required=False,
|
|
||||||
null_option='None',
|
|
||||||
label=_('Tenant group'),
|
|
||||||
fetch_trigger='open'
|
|
||||||
)
|
|
||||||
tenant_id = DynamicModelMultipleChoiceField(
|
|
||||||
queryset=Tenant.objects.all(),
|
|
||||||
required=False,
|
|
||||||
null_option='None',
|
|
||||||
query_params={
|
|
||||||
'group_id': '$tenant_group_id'
|
|
||||||
},
|
|
||||||
label=_('Tenant'),
|
|
||||||
fetch_trigger='open'
|
|
||||||
)
|
|
5
netbox/tenancy/forms/__init__.py
Normal file
5
netbox/tenancy/forms/__init__.py
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
from .forms import *
|
||||||
|
from .models import *
|
||||||
|
from .filtersets import *
|
||||||
|
from .bulk_edit import *
|
||||||
|
from .bulk_import import *
|
44
netbox/tenancy/forms/bulk_edit.py
Normal file
44
netbox/tenancy/forms/bulk_edit.py
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
from django import forms
|
||||||
|
|
||||||
|
from extras.forms import AddRemoveTagsForm, CustomFieldModelBulkEditForm
|
||||||
|
from tenancy.models import Tenant, TenantGroup
|
||||||
|
from utilities.forms import BootstrapMixin, DynamicModelChoiceField
|
||||||
|
|
||||||
|
__all__ = (
|
||||||
|
'TenantBulkEditForm',
|
||||||
|
'TenantGroupBulkEditForm',
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class TenantGroupBulkEditForm(BootstrapMixin, CustomFieldModelBulkEditForm):
|
||||||
|
pk = forms.ModelMultipleChoiceField(
|
||||||
|
queryset=TenantGroup.objects.all(),
|
||||||
|
widget=forms.MultipleHiddenInput
|
||||||
|
)
|
||||||
|
parent = DynamicModelChoiceField(
|
||||||
|
queryset=TenantGroup.objects.all(),
|
||||||
|
required=False
|
||||||
|
)
|
||||||
|
description = forms.CharField(
|
||||||
|
max_length=200,
|
||||||
|
required=False
|
||||||
|
)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
nullable_fields = ['parent', 'description']
|
||||||
|
|
||||||
|
|
||||||
|
class TenantBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
|
||||||
|
pk = forms.ModelMultipleChoiceField(
|
||||||
|
queryset=Tenant.objects.all(),
|
||||||
|
widget=forms.MultipleHiddenInput()
|
||||||
|
)
|
||||||
|
group = DynamicModelChoiceField(
|
||||||
|
queryset=TenantGroup.objects.all(),
|
||||||
|
required=False
|
||||||
|
)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
nullable_fields = [
|
||||||
|
'group',
|
||||||
|
]
|
36
netbox/tenancy/forms/bulk_import.py
Normal file
36
netbox/tenancy/forms/bulk_import.py
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
from extras.forms import CustomFieldModelCSVForm
|
||||||
|
from tenancy.models import Tenant, TenantGroup
|
||||||
|
from utilities.forms import CSVModelChoiceField, SlugField
|
||||||
|
|
||||||
|
__all__ = (
|
||||||
|
'TenantCSVForm',
|
||||||
|
'TenantGroupCSVForm',
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class TenantGroupCSVForm(CustomFieldModelCSVForm):
|
||||||
|
parent = CSVModelChoiceField(
|
||||||
|
queryset=TenantGroup.objects.all(),
|
||||||
|
required=False,
|
||||||
|
to_field_name='name',
|
||||||
|
help_text='Parent group'
|
||||||
|
)
|
||||||
|
slug = SlugField()
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = TenantGroup
|
||||||
|
fields = ('name', 'slug', 'parent', 'description')
|
||||||
|
|
||||||
|
|
||||||
|
class TenantCSVForm(CustomFieldModelCSVForm):
|
||||||
|
slug = SlugField()
|
||||||
|
group = CSVModelChoiceField(
|
||||||
|
queryset=TenantGroup.objects.all(),
|
||||||
|
required=False,
|
||||||
|
to_field_name='name',
|
||||||
|
help_text='Assigned group'
|
||||||
|
)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = Tenant
|
||||||
|
fields = ('name', 'slug', 'group', 'description', 'comments')
|
42
netbox/tenancy/forms/filtersets.py
Normal file
42
netbox/tenancy/forms/filtersets.py
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
from django import forms
|
||||||
|
from django.utils.translation import gettext as _
|
||||||
|
|
||||||
|
from extras.forms import CustomFieldModelFilterForm
|
||||||
|
from tenancy.models import Tenant, TenantGroup
|
||||||
|
from utilities.forms import BootstrapMixin, DynamicModelMultipleChoiceField, TagFilterField
|
||||||
|
|
||||||
|
|
||||||
|
class TenantGroupFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
|
||||||
|
model = TenantGroup
|
||||||
|
q = forms.CharField(
|
||||||
|
required=False,
|
||||||
|
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
|
||||||
|
label=_('Search')
|
||||||
|
)
|
||||||
|
parent_id = DynamicModelMultipleChoiceField(
|
||||||
|
queryset=TenantGroup.objects.all(),
|
||||||
|
required=False,
|
||||||
|
label=_('Parent group'),
|
||||||
|
fetch_trigger='open'
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class TenantFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
|
||||||
|
model = Tenant
|
||||||
|
field_groups = (
|
||||||
|
('q', 'tag'),
|
||||||
|
('group_id',),
|
||||||
|
)
|
||||||
|
q = forms.CharField(
|
||||||
|
required=False,
|
||||||
|
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
|
||||||
|
label=_('Search')
|
||||||
|
)
|
||||||
|
group_id = DynamicModelMultipleChoiceField(
|
||||||
|
queryset=TenantGroup.objects.all(),
|
||||||
|
required=False,
|
||||||
|
null_option='None',
|
||||||
|
label=_('Group'),
|
||||||
|
fetch_trigger='open'
|
||||||
|
)
|
||||||
|
tag = TagFilterField(model)
|
48
netbox/tenancy/forms/forms.py
Normal file
48
netbox/tenancy/forms/forms.py
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
from django import forms
|
||||||
|
from django.utils.translation import gettext as _
|
||||||
|
|
||||||
|
from tenancy.models import Tenant, TenantGroup
|
||||||
|
from utilities.forms import DynamicModelChoiceField, DynamicModelMultipleChoiceField
|
||||||
|
|
||||||
|
__all__ = (
|
||||||
|
'TenancyForm',
|
||||||
|
'TenancyFilterForm',
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class TenancyForm(forms.Form):
|
||||||
|
tenant_group = DynamicModelChoiceField(
|
||||||
|
queryset=TenantGroup.objects.all(),
|
||||||
|
required=False,
|
||||||
|
null_option='None',
|
||||||
|
initial_params={
|
||||||
|
'tenants': '$tenant'
|
||||||
|
}
|
||||||
|
)
|
||||||
|
tenant = DynamicModelChoiceField(
|
||||||
|
queryset=Tenant.objects.all(),
|
||||||
|
required=False,
|
||||||
|
query_params={
|
||||||
|
'group_id': '$tenant_group'
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class TenancyFilterForm(forms.Form):
|
||||||
|
tenant_group_id = DynamicModelMultipleChoiceField(
|
||||||
|
queryset=TenantGroup.objects.all(),
|
||||||
|
required=False,
|
||||||
|
null_option='None',
|
||||||
|
label=_('Tenant group'),
|
||||||
|
fetch_trigger='open'
|
||||||
|
)
|
||||||
|
tenant_id = DynamicModelMultipleChoiceField(
|
||||||
|
queryset=Tenant.objects.all(),
|
||||||
|
required=False,
|
||||||
|
null_option='None',
|
||||||
|
query_params={
|
||||||
|
'group_id': '$tenant_group_id'
|
||||||
|
},
|
||||||
|
label=_('Tenant'),
|
||||||
|
fetch_trigger='open'
|
||||||
|
)
|
47
netbox/tenancy/forms/models.py
Normal file
47
netbox/tenancy/forms/models.py
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
from extras.forms import CustomFieldModelForm
|
||||||
|
from extras.models import Tag
|
||||||
|
from tenancy.models import Tenant, TenantGroup
|
||||||
|
from utilities.forms import (
|
||||||
|
BootstrapMixin, CommentField, DynamicModelChoiceField, DynamicModelMultipleChoiceField, SlugField,
|
||||||
|
)
|
||||||
|
|
||||||
|
__all__ = (
|
||||||
|
'TenantForm',
|
||||||
|
'TenantGroupForm',
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class TenantGroupForm(BootstrapMixin, CustomFieldModelForm):
|
||||||
|
parent = DynamicModelChoiceField(
|
||||||
|
queryset=TenantGroup.objects.all(),
|
||||||
|
required=False
|
||||||
|
)
|
||||||
|
slug = SlugField()
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = TenantGroup
|
||||||
|
fields = [
|
||||||
|
'parent', 'name', 'slug', 'description',
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
class TenantForm(BootstrapMixin, CustomFieldModelForm):
|
||||||
|
slug = SlugField()
|
||||||
|
group = DynamicModelChoiceField(
|
||||||
|
queryset=TenantGroup.objects.all(),
|
||||||
|
required=False
|
||||||
|
)
|
||||||
|
comments = CommentField()
|
||||||
|
tags = DynamicModelMultipleChoiceField(
|
||||||
|
queryset=Tag.objects.all(),
|
||||||
|
required=False
|
||||||
|
)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = Tenant
|
||||||
|
fields = (
|
||||||
|
'name', 'slug', 'group', 'description', 'comments', 'tags',
|
||||||
|
)
|
||||||
|
fieldsets = (
|
||||||
|
('Tenant', ('name', 'slug', 'group', 'description', 'tags')),
|
||||||
|
)
|
Reference in New Issue
Block a user