Closes #5307: Add a region selector for every site form field

This commit is contained in:
Jeremy Stretch 2020-11-04 15:27:41 -05:00
parent 7d52b4d9a5
commit c53990c739
15 changed files with 312 additions and 49 deletions

View File

@ -303,14 +303,24 @@ class CircuitFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldFilterForm
# #
class CircuitTerminationForm(BootstrapMixin, forms.ModelForm): class CircuitTerminationForm(BootstrapMixin, forms.ModelForm):
region = DynamicModelChoiceField(
queryset=Region.objects.all(),
required=False,
initial_params={
'sites': '$site'
}
)
site = DynamicModelChoiceField( site = DynamicModelChoiceField(
queryset=Site.objects.all() queryset=Site.objects.all(),
query_params={
'region_id': '$region'
}
) )
class Meta: class Meta:
model = CircuitTermination model = CircuitTermination
fields = [ fields = [
'term_side', 'site', 'port_speed', 'upstream_speed', 'xconnect_id', 'pp_info', 'description', 'term_side', 'region', 'site', 'port_speed', 'upstream_speed', 'xconnect_id', 'pp_info', 'description',
] ]
help_texts = { help_texts = {
'port_speed': "Physical circuit speed", 'port_speed': "Physical circuit speed",

View File

@ -352,8 +352,18 @@ class SiteFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldFilterForm):
# #
class RackGroupForm(BootstrapMixin, forms.ModelForm): class RackGroupForm(BootstrapMixin, forms.ModelForm):
region = DynamicModelChoiceField(
queryset=Region.objects.all(),
required=False,
initial_params={
'sites': '$site'
}
)
site = DynamicModelChoiceField( site = DynamicModelChoiceField(
queryset=Site.objects.all() queryset=Site.objects.all(),
query_params={
'region_id': '$region'
}
) )
parent = DynamicModelChoiceField( parent = DynamicModelChoiceField(
queryset=RackGroup.objects.all(), queryset=RackGroup.objects.all(),
@ -367,7 +377,7 @@ class RackGroupForm(BootstrapMixin, forms.ModelForm):
class Meta: class Meta:
model = RackGroup model = RackGroup
fields = ( fields = (
'site', 'parent', 'name', 'slug', 'description', 'region', 'site', 'parent', 'name', 'slug', 'description',
) )
@ -447,14 +457,17 @@ class RackRoleCSVForm(CSVModelForm):
# #
class RackForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): class RackForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
site = DynamicModelChoiceField( region = DynamicModelChoiceField(
queryset=Site.objects.all() queryset=Region.objects.all(),
)
group = DynamicModelChoiceField(
queryset=RackGroup.objects.all(),
required=False, required=False,
initial_params={
'sites': '$site'
}
)
site = DynamicModelChoiceField(
queryset=Site.objects.all(),
query_params={ query_params={
'site_id': '$site' 'region_id': '$region'
} }
) )
role = DynamicModelChoiceField( role = DynamicModelChoiceField(
@ -470,8 +483,9 @@ class RackForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
class Meta: class Meta:
model = Rack model = Rack
fields = [ fields = [
'site', 'group', 'name', 'facility_id', 'tenant_group', 'tenant', 'status', 'role', 'serial', 'asset_tag', 'region', 'site', 'group', 'name', 'facility_id', 'tenant_group', 'tenant', 'status', 'role', 'serial',
'type', 'width', 'u_height', 'desc_units', 'outer_width', 'outer_depth', 'outer_unit', 'comments', 'tags', 'asset_tag', 'type', 'width', 'u_height', 'desc_units', 'outer_width', 'outer_depth', 'outer_unit',
'comments', 'tags',
] ]
help_texts = { help_texts = {
'site': "The site at which the rack exists", 'site': "The site at which the rack exists",
@ -548,9 +562,19 @@ class RackBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldBulkEditFor
queryset=Rack.objects.all(), queryset=Rack.objects.all(),
widget=forms.MultipleHiddenInput widget=forms.MultipleHiddenInput
) )
region = DynamicModelChoiceField(
queryset=Region.objects.all(),
required=False,
initial_params={
'sites': '$site'
}
)
site = DynamicModelChoiceField( site = DynamicModelChoiceField(
queryset=Site.objects.all(), queryset=Site.objects.all(),
required=False required=False,
query_params={
'region_id': '$region'
}
) )
group = DynamicModelChoiceField( group = DynamicModelChoiceField(
queryset=RackGroup.objects.all(), queryset=RackGroup.objects.all(),
@ -691,9 +715,19 @@ class RackElevationFilterForm(RackFilterForm):
# #
class RackReservationForm(BootstrapMixin, TenancyForm, forms.ModelForm): class RackReservationForm(BootstrapMixin, TenancyForm, forms.ModelForm):
region = DynamicModelChoiceField(
queryset=Region.objects.all(),
required=False,
initial_params={
'sites': '$site'
}
)
site = DynamicModelChoiceField( site = DynamicModelChoiceField(
queryset=Site.objects.all(), queryset=Site.objects.all(),
required=False required=False,
query_params={
'region_id': '$region'
}
) )
rack_group = DynamicModelChoiceField( rack_group = DynamicModelChoiceField(
queryset=RackGroup.objects.all(), queryset=RackGroup.objects.all(),
@ -707,7 +741,7 @@ class RackReservationForm(BootstrapMixin, TenancyForm, forms.ModelForm):
display_field='display_name', display_field='display_name',
query_params={ query_params={
'site_id': '$site', 'site_id': '$site',
'group_id': 'rack', 'group_id': '$rack',
} }
) )
units = NumericArrayField( units = NumericArrayField(
@ -809,15 +843,23 @@ class RackReservationBulkEditForm(BootstrapMixin, AddRemoveTagsForm, BulkEditFor
class RackReservationFilterForm(BootstrapMixin, TenancyFilterForm): class RackReservationFilterForm(BootstrapMixin, TenancyFilterForm):
model = RackReservation model = RackReservation
field_order = ['q', 'site', 'group_id', 'tenant_group', 'tenant'] field_order = ['q', 'region', 'site', 'group_id', 'tenant_group', 'tenant']
q = forms.CharField( q = forms.CharField(
required=False, required=False,
label='Search' label='Search'
) )
region = DynamicModelMultipleChoiceField(
queryset=Region.objects.all(),
to_field_name='slug',
required=False
)
site = DynamicModelMultipleChoiceField( site = DynamicModelMultipleChoiceField(
queryset=Site.objects.all(), queryset=Site.objects.all(),
to_field_name='slug', to_field_name='slug',
required=False required=False,
query_params={
'region': '$region'
}
) )
group_id = DynamicModelMultipleChoiceField( group_id = DynamicModelMultipleChoiceField(
queryset=RackGroup.objects.prefetch_related('site'), queryset=RackGroup.objects.prefetch_related('site'),
@ -3417,10 +3459,18 @@ class ConnectCableToDeviceForm(BootstrapMixin, forms.ModelForm):
""" """
Base form for connecting a Cable to a Device component Base form for connecting a Cable to a Device component
""" """
termination_b_region = DynamicModelChoiceField(
queryset=Region.objects.all(),
label='Region',
required=False
)
termination_b_site = DynamicModelChoiceField( termination_b_site = DynamicModelChoiceField(
queryset=Site.objects.all(), queryset=Site.objects.all(),
label='Site', label='Site',
required=False required=False,
query_params={
'region_id': '$termination_b_region'
}
) )
termination_b_rack = DynamicModelChoiceField( termination_b_rack = DynamicModelChoiceField(
queryset=Rack.objects.all(), queryset=Rack.objects.all(),
@ -3446,8 +3496,8 @@ class ConnectCableToDeviceForm(BootstrapMixin, forms.ModelForm):
class Meta: class Meta:
model = Cable model = Cable
fields = [ fields = [
'termination_b_site', 'termination_b_rack', 'termination_b_device', 'termination_b_id', 'type', 'status', 'termination_b_region', 'termination_b_site', 'termination_b_rack', 'termination_b_device',
'label', 'color', 'length', 'length_unit', 'termination_b_id', 'type', 'status', 'label', 'color', 'length', 'length_unit',
] ]
widgets = { widgets = {
'status': StaticSelect2, 'status': StaticSelect2,
@ -3544,10 +3594,18 @@ class ConnectCableToCircuitTerminationForm(BootstrapMixin, forms.ModelForm):
label='Provider', label='Provider',
required=False required=False
) )
termination_b_region = DynamicModelChoiceField(
queryset=Region.objects.all(),
label='Region',
required=False
)
termination_b_site = DynamicModelChoiceField( termination_b_site = DynamicModelChoiceField(
queryset=Site.objects.all(), queryset=Site.objects.all(),
label='Site', label='Site',
required=False required=False,
query_params={
'region_id': '$termination_b_region'
}
) )
termination_b_circuit = DynamicModelChoiceField( termination_b_circuit = DynamicModelChoiceField(
queryset=Circuit.objects.all(), queryset=Circuit.objects.all(),
@ -3571,8 +3629,8 @@ class ConnectCableToCircuitTerminationForm(BootstrapMixin, forms.ModelForm):
class Meta: class Meta:
model = Cable model = Cable
fields = [ fields = [
'termination_b_provider', 'termination_b_site', 'termination_b_circuit', 'termination_b_id', 'type', 'termination_b_provider', 'termination_b_region', 'termination_b_site', 'termination_b_circuit',
'status', 'label', 'color', 'length', 'length_unit', 'termination_b_id', 'type', 'status', 'label', 'color', 'length', 'length_unit',
] ]
def clean_termination_b_id(self): def clean_termination_b_id(self):
@ -3581,11 +3639,18 @@ class ConnectCableToCircuitTerminationForm(BootstrapMixin, forms.ModelForm):
class ConnectCableToPowerFeedForm(BootstrapMixin, forms.ModelForm): class ConnectCableToPowerFeedForm(BootstrapMixin, forms.ModelForm):
termination_b_region = DynamicModelChoiceField(
queryset=Region.objects.all(),
label='Region',
required=False
)
termination_b_site = DynamicModelChoiceField( termination_b_site = DynamicModelChoiceField(
queryset=Site.objects.all(), queryset=Site.objects.all(),
label='Site', label='Site',
required=False, required=False,
display_field='cid' query_params={
'region_id': '$termination_b_region'
}
) )
termination_b_rackgroup = DynamicModelChoiceField( termination_b_rackgroup = DynamicModelChoiceField(
queryset=RackGroup.objects.all(), queryset=RackGroup.objects.all(),
@ -3827,10 +3892,18 @@ class CableFilterForm(BootstrapMixin, forms.Form):
required=False, required=False,
label='Search' label='Search'
) )
region = DynamicModelMultipleChoiceField(
queryset=Region.objects.all(),
to_field_name='slug',
required=False
)
site = DynamicModelMultipleChoiceField( site = DynamicModelMultipleChoiceField(
queryset=Site.objects.all(), queryset=Site.objects.all(),
to_field_name='slug', to_field_name='slug',
required=False required=False,
query_params={
'region': '$region'
}
) )
tenant = DynamicModelMultipleChoiceField( tenant = DynamicModelMultipleChoiceField(
queryset=Tenant.objects.all(), queryset=Tenant.objects.all(),
@ -3879,10 +3952,18 @@ class CableFilterForm(BootstrapMixin, forms.Form):
# #
class ConsoleConnectionFilterForm(BootstrapMixin, forms.Form): class ConsoleConnectionFilterForm(BootstrapMixin, forms.Form):
region = DynamicModelMultipleChoiceField(
queryset=Region.objects.all(),
to_field_name='slug',
required=False
)
site = DynamicModelMultipleChoiceField( site = DynamicModelMultipleChoiceField(
queryset=Site.objects.all(), queryset=Site.objects.all(),
to_field_name='slug', to_field_name='slug',
required=False required=False,
query_params={
'region': '$region'
}
) )
device_id = DynamicModelMultipleChoiceField( device_id = DynamicModelMultipleChoiceField(
queryset=Device.objects.all(), queryset=Device.objects.all(),
@ -3895,10 +3976,18 @@ class ConsoleConnectionFilterForm(BootstrapMixin, forms.Form):
class PowerConnectionFilterForm(BootstrapMixin, forms.Form): class PowerConnectionFilterForm(BootstrapMixin, forms.Form):
region = DynamicModelMultipleChoiceField(
queryset=Region.objects.all(),
to_field_name='slug',
required=False
)
site = DynamicModelMultipleChoiceField( site = DynamicModelMultipleChoiceField(
queryset=Site.objects.all(), queryset=Site.objects.all(),
to_field_name='slug', to_field_name='slug',
required=False required=False,
query_params={
'region': '$region'
}
) )
device_id = DynamicModelMultipleChoiceField( device_id = DynamicModelMultipleChoiceField(
queryset=Device.objects.all(), queryset=Device.objects.all(),
@ -3911,10 +4000,18 @@ class PowerConnectionFilterForm(BootstrapMixin, forms.Form):
class InterfaceConnectionFilterForm(BootstrapMixin, forms.Form): class InterfaceConnectionFilterForm(BootstrapMixin, forms.Form):
region = DynamicModelMultipleChoiceField(
queryset=Region.objects.all(),
to_field_name='slug',
required=False
)
site = DynamicModelMultipleChoiceField( site = DynamicModelMultipleChoiceField(
queryset=Site.objects.all(), queryset=Site.objects.all(),
to_field_name='slug', to_field_name='slug',
required=False required=False,
query_params={
'region': '$region'
}
) )
device_id = DynamicModelMultipleChoiceField( device_id = DynamicModelMultipleChoiceField(
queryset=Device.objects.all(), queryset=Device.objects.all(),
@ -3938,9 +4035,19 @@ class DeviceSelectionForm(forms.Form):
class VirtualChassisCreateForm(BootstrapMixin, forms.ModelForm): class VirtualChassisCreateForm(BootstrapMixin, forms.ModelForm):
region = DynamicModelChoiceField(
queryset=Region.objects.all(),
required=False,
initial_params={
'sites': '$site'
}
)
site = DynamicModelChoiceField( site = DynamicModelChoiceField(
queryset=Site.objects.all(), queryset=Site.objects.all(),
required=False required=False,
query_params={
'region_id': '$region'
}
) )
rack = DynamicModelChoiceField( rack = DynamicModelChoiceField(
queryset=Rack.objects.all(), queryset=Rack.objects.all(),
@ -3973,7 +4080,7 @@ class VirtualChassisCreateForm(BootstrapMixin, forms.ModelForm):
class Meta: class Meta:
model = VirtualChassis model = VirtualChassis
fields = [ fields = [
'name', 'domain', 'site', 'rack', 'members', 'initial_position', 'tags', 'name', 'domain', 'region', 'site', 'rack', 'members', 'initial_position', 'tags',
] ]
def save(self, *args, **kwargs): def save(self, *args, **kwargs):
@ -4070,9 +4177,19 @@ class DeviceVCMembershipForm(forms.ModelForm):
class VCMemberSelectForm(BootstrapMixin, forms.Form): class VCMemberSelectForm(BootstrapMixin, forms.Form):
region = DynamicModelChoiceField(
queryset=Region.objects.all(),
required=False,
initial_params={
'sites': '$site'
}
)
site = DynamicModelChoiceField( site = DynamicModelChoiceField(
queryset=Site.objects.all(), queryset=Site.objects.all(),
required=False required=False,
query_params={
'region_id': '$region'
}
) )
rack = DynamicModelChoiceField( rack = DynamicModelChoiceField(
queryset=Rack.objects.all(), queryset=Rack.objects.all(),
@ -4171,8 +4288,18 @@ class VirtualChassisFilterForm(BootstrapMixin, CustomFieldFilterForm):
# #
class PowerPanelForm(BootstrapMixin, forms.ModelForm): class PowerPanelForm(BootstrapMixin, forms.ModelForm):
region = DynamicModelChoiceField(
queryset=Region.objects.all(),
required=False,
initial_params={
'sites': '$site'
}
)
site = DynamicModelChoiceField( site = DynamicModelChoiceField(
queryset=Site.objects.all() queryset=Site.objects.all(),
query_params={
'region_id': '$region'
}
) )
rack_group = DynamicModelChoiceField( rack_group = DynamicModelChoiceField(
queryset=RackGroup.objects.all(), queryset=RackGroup.objects.all(),
@ -4189,7 +4316,7 @@ class PowerPanelForm(BootstrapMixin, forms.ModelForm):
class Meta: class Meta:
model = PowerPanel model = PowerPanel
fields = [ fields = [
'site', 'rack_group', 'name', 'tags', 'region', 'site', 'rack_group', 'name', 'tags',
] ]
@ -4224,9 +4351,19 @@ class PowerPanelBulkEditForm(BootstrapMixin, AddRemoveTagsForm, BulkEditForm):
queryset=PowerPanel.objects.all(), queryset=PowerPanel.objects.all(),
widget=forms.MultipleHiddenInput widget=forms.MultipleHiddenInput
) )
region = DynamicModelChoiceField(
queryset=Region.objects.all(),
required=False,
initial_params={
'sites': '$site'
}
)
site = DynamicModelChoiceField( site = DynamicModelChoiceField(
queryset=Site.objects.all(), queryset=Site.objects.all(),
required=False required=False,
query_params={
'region_id': '$region'
}
) )
rack_group = DynamicModelChoiceField( rack_group = DynamicModelChoiceField(
queryset=RackGroup.objects.all(), queryset=RackGroup.objects.all(),
@ -4278,11 +4415,21 @@ class PowerPanelFilterForm(BootstrapMixin, CustomFieldFilterForm):
# #
class PowerFeedForm(BootstrapMixin, CustomFieldModelForm): class PowerFeedForm(BootstrapMixin, CustomFieldModelForm):
region = DynamicModelChoiceField(
queryset=Region.objects.all(),
required=False,
initial_params={
'sites__powerpanel': '$power_panel'
}
)
site = DynamicModelChoiceField( site = DynamicModelChoiceField(
queryset=Site.objects.all(), queryset=Site.objects.all(),
required=False, required=False,
initial_params={ initial_params={
'powerpanel': '$power_panel' 'powerpanel': '$power_panel'
},
query_params={
'region_id': '$region'
} }
) )
power_panel = DynamicModelChoiceField( power_panel = DynamicModelChoiceField(
@ -4308,7 +4455,7 @@ class PowerFeedForm(BootstrapMixin, CustomFieldModelForm):
class Meta: class Meta:
model = PowerFeed model = PowerFeed
fields = [ fields = [
'site', 'power_panel', 'rack', 'name', 'status', 'type', 'supply', 'phase', 'voltage', 'amperage', 'region', 'site', 'power_panel', 'rack', 'name', 'status', 'type', 'supply', 'phase', 'voltage', 'amperage',
'max_utilization', 'comments', 'tags', 'max_utilization', 'comments', 'tags',
] ]
widgets = { widgets = {

View File

@ -2043,8 +2043,11 @@ class CableCreateView(ObjectEditView):
initial_data = {k: request.GET[k] for k in request.GET} initial_data = {k: request.GET[k] for k in request.GET}
# Set initial site and rack based on side A termination (if not already set) # Set initial site and rack based on side A termination (if not already set)
termination_a_site = getattr(obj.termination_a.parent, 'site', None)
if termination_a_site and 'termination_b_region' not in initial_data:
initial_data['termination_b_region'] = termination_a_site.region
if 'termination_b_site' not in initial_data: if 'termination_b_site' not in initial_data:
initial_data['termination_b_site'] = getattr(obj.termination_a.parent, 'site', None) initial_data['termination_b_site'] = termination_a_site
if 'termination_b_rack' not in initial_data: if 'termination_b_rack' not in initial_data:
initial_data['termination_b_rack'] = getattr(obj.termination_a.parent, 'rack', None) initial_data['termination_b_rack'] = getattr(obj.termination_a.parent, 'rack', None)

View File

@ -253,10 +253,20 @@ class PrefixForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
label='VRF', label='VRF',
display_field='display_name' display_field='display_name'
) )
region = DynamicModelChoiceField(
queryset=Region.objects.all(),
required=False,
initial_params={
'sites': '$site'
}
)
site = DynamicModelChoiceField( site = DynamicModelChoiceField(
queryset=Site.objects.all(), queryset=Site.objects.all(),
required=False, required=False,
null_option='None' null_option='None',
query_params={
'region_id': '$region'
}
) )
vlan_group = DynamicModelChoiceField( vlan_group = DynamicModelChoiceField(
queryset=VLANGroup.objects.all(), queryset=VLANGroup.objects.all(),
@ -369,9 +379,17 @@ class PrefixBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldBulkEditF
queryset=Prefix.objects.all(), queryset=Prefix.objects.all(),
widget=forms.MultipleHiddenInput() widget=forms.MultipleHiddenInput()
) )
region = DynamicModelChoiceField(
queryset=Region.objects.all(),
required=False,
to_field_name='slug'
)
site = DynamicModelChoiceField( site = DynamicModelChoiceField(
queryset=Site.objects.all(), queryset=Site.objects.all(),
required=False required=False,
query_params={
'region': '$region'
}
) )
vrf = DynamicModelChoiceField( vrf = DynamicModelChoiceField(
queryset=VRF.objects.all(), queryset=VRF.objects.all(),
@ -529,10 +547,21 @@ class IPAddressForm(BootstrapMixin, TenancyForm, ReturnURLForm, CustomFieldModel
label='VRF', label='VRF',
display_field='display_name' display_field='display_name'
) )
nat_region = DynamicModelChoiceField(
queryset=Region.objects.all(),
required=False,
label='Region',
initial_params={
'sites': '$nat_site'
}
)
nat_site = DynamicModelChoiceField( nat_site = DynamicModelChoiceField(
queryset=Site.objects.all(), queryset=Site.objects.all(),
required=False, required=False,
label='Site' label='Site',
query_params={
'region_id': '$nat_region'
}
) )
nat_rack = DynamicModelChoiceField( nat_rack = DynamicModelChoiceField(
queryset=Rack.objects.all(), queryset=Rack.objects.all(),
@ -924,16 +953,26 @@ class IPAddressFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldFilterFo
# #
class VLANGroupForm(BootstrapMixin, forms.ModelForm): class VLANGroupForm(BootstrapMixin, forms.ModelForm):
region = DynamicModelChoiceField(
queryset=Region.objects.all(),
required=False,
initial_params={
'sites': '$site'
}
)
site = DynamicModelChoiceField( site = DynamicModelChoiceField(
queryset=Site.objects.all(), queryset=Site.objects.all(),
required=False required=False,
query_params={
'region_id': '$region'
}
) )
slug = SlugField() slug = SlugField()
class Meta: class Meta:
model = VLANGroup model = VLANGroup
fields = [ fields = [
'site', 'name', 'slug', 'description', 'region', 'site', 'name', 'slug', 'description',
] ]
@ -973,10 +1012,20 @@ class VLANGroupFilterForm(BootstrapMixin, forms.Form):
# #
class VLANForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): class VLANForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
region = DynamicModelChoiceField(
queryset=Region.objects.all(),
required=False,
initial_params={
'sites': '$site'
}
)
site = DynamicModelChoiceField( site = DynamicModelChoiceField(
queryset=Site.objects.all(), queryset=Site.objects.all(),
required=False, required=False,
null_option='None' null_option='None',
query_params={
'region_id': '$region'
}
) )
group = DynamicModelChoiceField( group = DynamicModelChoiceField(
queryset=VLANGroup.objects.all(), queryset=VLANGroup.objects.all(),
@ -1065,9 +1114,17 @@ class VLANBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldBulkEditFor
queryset=VLAN.objects.all(), queryset=VLAN.objects.all(),
widget=forms.MultipleHiddenInput() widget=forms.MultipleHiddenInput()
) )
region = DynamicModelChoiceField(
queryset=Region.objects.all(),
required=False,
to_field_name='slug'
)
site = DynamicModelChoiceField( site = DynamicModelChoiceField(
queryset=Site.objects.all(), queryset=Site.objects.all(),
required=False required=False,
query_params={
'region': '$region'
}
) )
group = DynamicModelChoiceField( group = DynamicModelChoiceField(
queryset=VLANGroup.objects.all(), queryset=VLANGroup.objects.all(),

View File

@ -40,6 +40,7 @@
<p class="form-control-static">{{ form.term_side.value }}</p> <p class="form-control-static">{{ form.term_side.value }}</p>
</div> </div>
</div> </div>
{% render_field form.region %}
{% render_field form.site %} {% render_field form.site %}
</div> </div>
</div> </div>

View File

@ -32,6 +32,12 @@
<div class="panel-body"> <div class="panel-body">
{% if termination_a.device %} {% if termination_a.device %}
{# Device component #} {# Device component #}
<div class="form-group">
<label class="col-md-3 control-label required">Region</label>
<div class="col-md-9">
<p class="form-control-static">{{ termination_a.device.site.region }}</p>
</div>
</div>
<div class="form-group"> <div class="form-group">
<label class="col-md-3 control-label required">Site</label> <label class="col-md-3 control-label required">Site</label>
<div class="col-md-9"> <div class="col-md-9">
@ -111,6 +117,9 @@
{% if 'termination_b_provider' in form.fields %} {% if 'termination_b_provider' in form.fields %}
{% render_field form.termination_b_provider %} {% render_field form.termination_b_provider %}
{% endif %} {% endif %}
{% if 'termination_b_region' in form.fields %}
{% render_field form.termination_b_region %}
{% endif %}
{% if 'termination_b_site' in form.fields %} {% if 'termination_b_site' in form.fields %}
{% render_field form.termination_b_site %} {% render_field form.termination_b_site %}
{% endif %} {% endif %}

View File

@ -3,10 +3,16 @@
{% block form %} {% block form %}
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading"><strong>Power Feed</strong></div> <div class="panel-heading"><strong>Power Panel</strong></div>
<div class="panel-body"> <div class="panel-body">
{% render_field form.region %}
{% render_field form.site %} {% render_field form.site %}
{% render_field form.power_panel %} {% render_field form.power_panel %}
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading"><strong>Power Feed</strong></div>
<div class="panel-body">
{% render_field form.rack %} {% render_field form.rack %}
{% render_field form.name %} {% render_field form.name %}
{% render_field form.status %} {% render_field form.status %}

View File

@ -5,6 +5,7 @@
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading"><strong>Rack</strong></div> <div class="panel-heading"><strong>Rack</strong></div>
<div class="panel-body"> <div class="panel-body">
{% render_field form.region %}
{% render_field form.site %} {% render_field form.site %}
{% render_field form.name %} {% render_field form.name %}
{% render_field form.facility_id %} {% render_field form.facility_id %}

View File

@ -5,6 +5,7 @@
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading"><strong>Rack Reservation</strong></div> <div class="panel-heading"><strong>Rack Reservation</strong></div>
<div class="panel-body"> <div class="panel-body">
{% render_field form.region %}
{% render_field form.site %} {% render_field form.site %}
{% render_field form.rack_group %} {% render_field form.rack_group %}
{% render_field form.rack %} {% render_field form.rack %}

View File

@ -13,6 +13,7 @@
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading"><strong>Member Devices</strong></div> <div class="panel-heading"><strong>Member Devices</strong></div>
<div class="panel-body"> <div class="panel-body">
{% render_field form.region %}
{% render_field form.site %} {% render_field form.site %}
{% render_field form.rack %} {% render_field form.rack %}
{% render_field form.members %} {% render_field form.members %}

View File

@ -62,6 +62,7 @@
</ul> </ul>
<div class="tab-content"> <div class="tab-content">
<div class="tab-pane active" id="by_device"> <div class="tab-pane active" id="by_device">
{% render_field form.nat_region %}
{% render_field form.nat_site %} {% render_field form.nat_site %}
{% render_field form.nat_rack %} {% render_field form.nat_rack %}
{% render_field form.nat_device %} {% render_field form.nat_device %}

View File

@ -16,6 +16,7 @@
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading"><strong>Site/VLAN Assignment</strong></div> <div class="panel-heading"><strong>Site/VLAN Assignment</strong></div>
<div class="panel-body"> <div class="panel-body">
{% render_field form.region %}
{% render_field form.site %} {% render_field form.site %}
{% render_field form.vlan_group %} {% render_field form.vlan_group %}
{% render_field form.vlan %} {% render_field form.vlan %}

View File

@ -8,12 +8,18 @@
{% render_field form.vid %} {% render_field form.vid %}
{% render_field form.name %} {% render_field form.name %}
{% render_field form.status %} {% render_field form.status %}
{% render_field form.site %}
{% render_field form.group %}
{% render_field form.role %} {% render_field form.role %}
{% render_field form.description %} {% render_field form.description %}
</div> </div>
</div> </div>
<div class="panel panel-default">
<div class="panel-heading"><strong>Assignment</strong></div>
<div class="panel-body">
{% render_field form.region %}
{% render_field form.site %}
{% render_field form.group %}
</div>
</div>
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading"><strong>Tenancy</strong></div> <div class="panel-heading"><strong>Tenancy</strong></div>
<div class="panel-body"> <div class="panel-body">

View File

@ -8,6 +8,7 @@
{% render_field form.name %} {% render_field form.name %}
{% render_field form.type %} {% render_field form.type %}
{% render_field form.group %} {% render_field form.group %}
{% render_field form.region %}
{% render_field form.site %} {% render_field form.site %}
</div> </div>
</div> </div>

View File

@ -79,9 +79,19 @@ class ClusterForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
queryset=ClusterGroup.objects.all(), queryset=ClusterGroup.objects.all(),
required=False required=False
) )
region = DynamicModelChoiceField(
queryset=Region.objects.all(),
required=False,
initial_params={
'sites': '$site'
}
)
site = DynamicModelChoiceField( site = DynamicModelChoiceField(
queryset=Site.objects.all(), queryset=Site.objects.all(),
required=False required=False,
query_params={
'region_id': '$region'
}
) )
comments = CommentField() comments = CommentField()
tags = DynamicModelMultipleChoiceField( tags = DynamicModelMultipleChoiceField(
@ -92,7 +102,7 @@ class ClusterForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
class Meta: class Meta:
model = Cluster model = Cluster
fields = ( fields = (
'name', 'type', 'group', 'tenant', 'site', 'comments', 'tags', 'name', 'type', 'group', 'tenant', 'region', 'site', 'comments', 'tags',
) )
@ -143,9 +153,17 @@ class ClusterBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldBulkEdit
queryset=Tenant.objects.all(), queryset=Tenant.objects.all(),
required=False required=False
) )
region = DynamicModelChoiceField(
queryset=Region.objects.all(),
required=False,
to_field_name='slug'
)
site = DynamicModelChoiceField( site = DynamicModelChoiceField(
queryset=Site.objects.all(), queryset=Site.objects.all(),
required=False required=False,
query_params={
'region': '$region'
}
) )
comments = CommentField( comments = CommentField(
widget=SmallTextarea, widget=SmallTextarea,