add "Location" to CircuitTermination

model and form
This commit is contained in:
George Cox 2022-06-25 21:48:10 +01:00
parent 4315c4697c
commit f193dd4281
4 changed files with 22 additions and 5 deletions

View File

@ -9,7 +9,7 @@
IF YOUR PULL REQUEST DOES NOT REFERENCE AN ACCEPTED BUG REPORT OR
FEATURE REQUEST, IT WILL BE MARKED AS INVALID AND CLOSED.
-->
### Fixes: <ISSUE NUMBER GOES HERE>
### Fixes: 9604
<!--
Please include a summary of the proposed changes below.
-->

View File

@ -2,7 +2,7 @@ from django import forms
from django.utils.translation import gettext as _
from circuits.models import *
from dcim.models import Region, Site, SiteGroup
from dcim.models import Location, Region, Site, SiteGroup
from ipam.models import ASN
from netbox.forms import NetBoxModelForm
from tenancy.forms import TenancyForm
@ -150,6 +150,14 @@ class CircuitTerminationForm(BootstrapMixin, forms.ModelForm):
},
required=False
)
location = DynamicModelChoiceField(
queryset=Location.objects.all(),
query_params={
'region_id': '$region',
'site_id': '$site',
},
required=False
)
provider_network = DynamicModelChoiceField(
queryset=ProviderNetwork.objects.all(),
required=False
@ -158,7 +166,7 @@ class CircuitTerminationForm(BootstrapMixin, forms.ModelForm):
class Meta:
model = CircuitTermination
fields = [
'provider', 'circuit', 'term_side', 'region', 'site_group', 'site', 'provider_network', 'mark_connected',
'provider', 'circuit', 'term_side', 'region', 'site_group', 'site', 'location', 'provider_network', 'mark_connected',
'port_speed', 'upstream_speed', 'xconnect_id', 'pp_info', 'description',
]
help_texts = {

View File

@ -154,6 +154,13 @@ class CircuitTermination(WebhooksMixin, ChangeLoggedModel, LinkTermination):
blank=True,
null=True
)
location = models.ForeignKey(
to='dcim.Location',
on_delete=models.PROTECT,
related_name='circuit_terminations',
blank=True,
null=True
)
provider_network = models.ForeignKey(
to='circuits.ProviderNetwork',
on_delete=models.PROTECT,
@ -204,9 +211,10 @@ class CircuitTermination(WebhooksMixin, ChangeLoggedModel, LinkTermination):
# Must define either site *or* provider network
if self.site is None and self.provider_network is None:
raise ValidationError("A circuit termination must attach to either a site or a provider network.")
raise ValidationError("A circuit termination must attach to either a site [+optionally a location] or a provider network.")
if self.site and self.provider_network:
raise ValidationError("A circuit termination cannot attach to both a site and a provider network.")
raise ValidationError("A circuit termination cannot attach to both a site [+optionally a location] and a provider network.")
def to_objectchange(self, action):
objectchange = super().to_objectchange(action)

View File

@ -29,6 +29,7 @@
{% render_field form.region %}
{% render_field form.site_group %}
{% render_field form.site %}
{% render_field form.location %}
</div>
<div class="tab-pane{% if providernetwork_tab_active %} active{% endif %}" id="providernetwork">
{% render_field form.provider_network %}