diff --git a/netbox/circuits/migrations/0052_alter_circuit__abs_distance_alter_circuit_distance.py b/netbox/circuits/migrations/0052_extend_circuit_abs_distance_upper_limit.py similarity index 61% rename from netbox/circuits/migrations/0052_alter_circuit__abs_distance_alter_circuit_distance.py rename to netbox/circuits/migrations/0052_extend_circuit_abs_distance_upper_limit.py index f5e3c3337..eba606b03 100644 --- a/netbox/circuits/migrations/0052_alter_circuit__abs_distance_alter_circuit_distance.py +++ b/netbox/circuits/migrations/0052_extend_circuit_abs_distance_upper_limit.py @@ -1,3 +1,5 @@ +# Generated by Django 5.2.1 on 2025-05-16 14:42 + from django.db import migrations, models @@ -11,11 +13,6 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='circuit', name='_abs_distance', - field=models.DecimalField(blank=True, decimal_places=4, max_digits=18, null=True), - ), - migrations.AlterField( - model_name='circuit', - name='distance', - field=models.DecimalField(blank=True, decimal_places=2, max_digits=16, null=True), + field=models.DecimalField(blank=True, decimal_places=4, max_digits=13, null=True), ), ] diff --git a/netbox/netbox/models/mixins.py b/netbox/netbox/models/mixins.py index 9f2c3ca6d..46a85b126 100644 --- a/netbox/netbox/models/mixins.py +++ b/netbox/netbox/models/mixins.py @@ -1,3 +1,4 @@ + from django.core.exceptions import ValidationError from django.db import models from django.utils.translation import gettext_lazy as _ @@ -55,10 +56,10 @@ class WeightMixin(models.Model): class DistanceMixin(models.Model): distance = models.DecimalField( verbose_name=_('distance'), - max_digits=16, + max_digits=8, decimal_places=2, blank=True, - null=True + null=True, ) distance_unit = models.CharField( verbose_name=_('distance unit'), @@ -69,7 +70,7 @@ class DistanceMixin(models.Model): ) # Stores the normalized distance (in meters) for database ordering _abs_distance = models.DecimalField( - max_digits=18, + max_digits=13, decimal_places=4, blank=True, null=True diff --git a/netbox/utilities/forms/mixins.py b/netbox/utilities/forms/mixins.py index ab90fbe16..058681060 100644 --- a/netbox/utilities/forms/mixins.py +++ b/netbox/utilities/forms/mixins.py @@ -1,10 +1,10 @@ import time +from decimal import Decimal from django import forms +from django.core.validators import MaxValueValidator, MinValueValidator from django.utils.translation import gettext_lazy as _ -from utilities.conversion import to_meters - __all__ = ( 'CheckLastUpdatedMixin', ) @@ -49,30 +49,10 @@ class CheckLastUpdatedMixin(forms.Form): class DistanceValidationMixin(forms.Form): - def clean(self): - super().clean() - - distance = self.cleaned_data.get('distance', None) - unit = self.cleaned_data.get('distance_unit', None) - if distance and unit: - model_class = self._meta.model - distance_field = model_class._meta.get_field('distance') - max_digits = distance_field.max_digits - distance_field.decimal_places - max_distance = 10 ** max_digits - - abs_distance = to_meters(distance, unit) - - if abs_distance > max_distance: - raise forms.ValidationError(_( - "{distance} {unit} ({abs_distance} m) exceeds the maximum allowed distance for " - "{model._meta.verbose_name} distance. Distance must normalize to no more than " - "{max_distance} meters.".format( - distance=distance, - unit=unit, - abs_distance=abs_distance, - model=model_class, - max_distance=max_distance - ) - )) - - self.cleaned_data['_abs_distance'] = abs_distance + distance = forms.DecimalField( + required=False, + validators=[ + MinValueValidator(Decimal(0)), + MaxValueValidator(Decimal(100000)), + ] + ) diff --git a/netbox/utilities/templates/form_helpers/render_fieldset.html b/netbox/utilities/templates/form_helpers/render_fieldset.html index ae8252b97..0faf23c92 100644 --- a/netbox/utilities/templates/form_helpers/render_fieldset.html +++ b/netbox/utilities/templates/form_helpers/render_fieldset.html @@ -6,7 +6,7 @@