|
|
@@ -62,11 +62,41 @@ class Region(NestedGroupModel):
|
|
|
)
|
|
|
|
|
|
class Meta:
|
|
|
- unique_together = (
|
|
|
- ('parent', 'name'),
|
|
|
- ('parent', 'slug'),
|
|
|
+ constraints = (
|
|
|
+ models.UniqueConstraint(
|
|
|
+ fields=('parent', 'name'),
|
|
|
+ name='dcim_region_parent_name'
|
|
|
+ ),
|
|
|
+ models.UniqueConstraint(
|
|
|
+ fields=('name',),
|
|
|
+ name='dcim_region_name',
|
|
|
+ condition=Q(parent=None)
|
|
|
+ ),
|
|
|
+ models.UniqueConstraint(
|
|
|
+ fields=('parent', 'slug'),
|
|
|
+ name='dcim_region_parent_slug'
|
|
|
+ ),
|
|
|
+ models.UniqueConstraint(
|
|
|
+ fields=('slug',),
|
|
|
+ name='dcim_region_slug',
|
|
|
+ condition=Q(parent=None)
|
|
|
+ ),
|
|
|
)
|
|
|
|
|
|
+ def validate_unique(self, exclude=None):
|
|
|
+ if self.parent is None:
|
|
|
+ regions = Region.objects.exclude(pk=self.pk)
|
|
|
+ if regions.filter(name=self.name, parent__isnull=True).exists():
|
|
|
+ raise ValidationError({
|
|
|
+ 'name': 'A region with this name already exists.'
|
|
|
+ })
|
|
|
+ if regions.filter(slug=self.slug, parent__isnull=True).exists():
|
|
|
+ raise ValidationError({
|
|
|
+ 'name': 'A region with this slug already exists.'
|
|
|
+ })
|
|
|
+
|
|
|
+ super().validate_unique(exclude=exclude)
|
|
|
+
|
|
|
def get_absolute_url(self):
|
|
|
return reverse('dcim:region', args=[self.pk])
|
|
|
|
|
|
@@ -119,11 +149,41 @@ class SiteGroup(NestedGroupModel):
|
|
|
)
|
|
|
|
|
|
class Meta:
|
|
|
- unique_together = (
|
|
|
- ('parent', 'name'),
|
|
|
- ('parent', 'slug'),
|
|
|
+ constraints = (
|
|
|
+ models.UniqueConstraint(
|
|
|
+ fields=('parent', 'name'),
|
|
|
+ name='dcim_sitegroup_parent_name'
|
|
|
+ ),
|
|
|
+ models.UniqueConstraint(
|
|
|
+ fields=('name',),
|
|
|
+ name='dcim_sitegroup_name',
|
|
|
+ condition=Q(parent=None)
|
|
|
+ ),
|
|
|
+ models.UniqueConstraint(
|
|
|
+ fields=('parent', 'slug'),
|
|
|
+ name='dcim_sitegroup_parent_slug'
|
|
|
+ ),
|
|
|
+ models.UniqueConstraint(
|
|
|
+ fields=('slug',),
|
|
|
+ name='dcim_sitegroup_slug',
|
|
|
+ condition=Q(parent=None)
|
|
|
+ ),
|
|
|
)
|
|
|
|
|
|
+ def validate_unique(self, exclude=None):
|
|
|
+ if self.parent is None:
|
|
|
+ site_groups = SiteGroup.objects.exclude(pk=self.pk)
|
|
|
+ if site_groups.filter(name=self.name, parent__isnull=True).exists():
|
|
|
+ raise ValidationError({
|
|
|
+ 'name': 'A site group with this name already exists.'
|
|
|
+ })
|
|
|
+ if site_groups.filter(slug=self.slug, parent__isnull=True).exists():
|
|
|
+ raise ValidationError({
|
|
|
+ 'name': 'A site group with this slug already exists.'
|
|
|
+ })
|
|
|
+
|
|
|
+ super().validate_unique(exclude=exclude)
|
|
|
+
|
|
|
def get_absolute_url(self):
|
|
|
return reverse('dcim:sitegroup', args=[self.pk])
|
|
|
|
|
|
@@ -335,10 +395,40 @@ class Location(NestedGroupModel):
|
|
|
|
|
|
class Meta:
|
|
|
ordering = ['site', 'name']
|
|
|
- unique_together = ([
|
|
|
- ('site', 'parent', 'name'),
|
|
|
- ('site', 'parent', 'slug'),
|
|
|
- ])
|
|
|
+ constraints = (
|
|
|
+ models.UniqueConstraint(
|
|
|
+ fields=('site', 'parent', 'name'),
|
|
|
+ name='dcim_location_parent_name'
|
|
|
+ ),
|
|
|
+ models.UniqueConstraint(
|
|
|
+ fields=('site', 'name'),
|
|
|
+ name='dcim_location_name',
|
|
|
+ condition=Q(parent=None)
|
|
|
+ ),
|
|
|
+ models.UniqueConstraint(
|
|
|
+ fields=('site', 'parent', 'slug'),
|
|
|
+ name='dcim_location_parent_slug'
|
|
|
+ ),
|
|
|
+ models.UniqueConstraint(
|
|
|
+ fields=('site', 'slug'),
|
|
|
+ name='dcim_location_slug',
|
|
|
+ condition=Q(parent=None)
|
|
|
+ ),
|
|
|
+ )
|
|
|
+
|
|
|
+ def validate_unique(self, exclude=None):
|
|
|
+ if self.parent is None:
|
|
|
+ locations = Location.objects.exclude(pk=self.pk)
|
|
|
+ if locations.filter(name=self.name, site=self.site, parent__isnull=True).exists():
|
|
|
+ raise ValidationError({
|
|
|
+ "name": f"A location with this name in site {self.site} already exists."
|
|
|
+ })
|
|
|
+ if locations.filter(slug=self.slug, site=self.site, parent__isnull=True).exists():
|
|
|
+ raise ValidationError({
|
|
|
+ "name": f"A location with this slug in site {self.site} already exists."
|
|
|
+ })
|
|
|
+
|
|
|
+ super().validate_unique(exclude=exclude)
|
|
|
|
|
|
def get_absolute_url(self):
|
|
|
return reverse('dcim:location', args=[self.pk])
|