Fixes #19896: cf minmax mustbe int (#20207)
Some checks are pending
CI / build (20.x, 3.10) (push) Waiting to run
CI / build (20.x, 3.11) (push) Waiting to run
CI / build (20.x, 3.12) (push) Waiting to run
CodeQL / Analyze (${{ matrix.language }}) (none, actions) (push) Waiting to run
CodeQL / Analyze (${{ matrix.language }}) (none, javascript-typescript) (push) Waiting to run
CodeQL / Analyze (${{ matrix.language }}) (none, python) (push) Waiting to run

This commit is contained in:
Jonathan Ramstedt 2025-09-05 02:10:05 +03:00 committed by GitHub
parent 8a1db81111
commit 309e434064
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 35 additions and 10 deletions

View File

@ -76,11 +76,11 @@ class CustomFieldBulkEditForm(ChangelogMessageMixin, BulkEditForm):
required=False, required=False,
widget=BulkEditNullBooleanSelect() widget=BulkEditNullBooleanSelect()
) )
validation_minimum = forms.IntegerField( validation_minimum = forms.DecimalField(
label=_('Minimum value'), label=_('Minimum value'),
required=False, required=False,
) )
validation_maximum = forms.IntegerField( validation_maximum = forms.DecimalField(
label=_('Maximum value'), label=_('Maximum value'),
required=False, required=False,
) )

View File

@ -103,11 +103,11 @@ class CustomFieldFilterForm(SavedFiltersMixin, FilterForm):
choices=BOOLEAN_WITH_BLANK_CHOICES choices=BOOLEAN_WITH_BLANK_CHOICES
) )
) )
validation_minimum = forms.IntegerField( validation_minimum = forms.DecimalField(
label=_('Minimum value'), label=_('Minimum value'),
required=False required=False
) )
validation_maximum = forms.IntegerField( validation_maximum = forms.DecimalField(
label=_('Maximum value'), label=_('Maximum value'),
required=False required=False
) )

View File

@ -17,7 +17,7 @@ if TYPE_CHECKING:
) )
from tenancy.graphql.filters import TenantFilter, TenantGroupFilter from tenancy.graphql.filters import TenantFilter, TenantGroupFilter
from netbox.graphql.enums import ColorEnum from netbox.graphql.enums import ColorEnum
from netbox.graphql.filter_lookups import IntegerLookup, JSONFilter, StringArrayLookup, TreeNodeFilter from netbox.graphql.filter_lookups import FloatLookup, IntegerLookup, JSONFilter, StringArrayLookup, TreeNodeFilter
from users.graphql.filters import GroupFilter, UserFilter from users.graphql.filters import GroupFilter, UserFilter
from virtualization.graphql.filters import ClusterFilter, ClusterGroupFilter, ClusterTypeFilter from virtualization.graphql.filters import ClusterFilter, ClusterGroupFilter, ClusterTypeFilter
from .enums import * from .enums import *
@ -151,10 +151,10 @@ class CustomFieldFilter(BaseObjectTypeFilterMixin, ChangeLogFilterMixin):
weight: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = ( weight: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
strawberry_django.filter_field() strawberry_django.filter_field()
) )
validation_minimum: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = ( validation_minimum: Annotated['FloatLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
strawberry_django.filter_field() strawberry_django.filter_field()
) )
validation_maximum: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = ( validation_maximum: Annotated['FloatLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
strawberry_django.filter_field() strawberry_django.filter_field()
) )
validation_regex: FilterLookup[str] | None = strawberry_django.filter_field() validation_regex: FilterLookup[str] | None = strawberry_django.filter_field()

View File

@ -0,0 +1,21 @@
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('extras', '0132_configcontextprofile'),
]
operations = [
migrations.AlterField(
model_name='customfield',
name='validation_maximum',
field=models.DecimalField(blank=True, decimal_places=4, max_digits=16, null=True),
),
migrations.AlterField(
model_name='customfield',
name='validation_minimum',
field=models.DecimalField(blank=True, decimal_places=4, max_digits=16, null=True),
),
]

View File

@ -174,13 +174,17 @@ class CustomField(CloningMixin, ExportTemplatesMixin, ChangeLoggedModel):
verbose_name=_('display weight'), verbose_name=_('display weight'),
help_text=_('Fields with higher weights appear lower in a form.') help_text=_('Fields with higher weights appear lower in a form.')
) )
validation_minimum = models.BigIntegerField( validation_minimum = models.DecimalField(
max_digits=16,
decimal_places=4,
blank=True, blank=True,
null=True, null=True,
verbose_name=_('minimum value'), verbose_name=_('minimum value'),
help_text=_('Minimum allowed value (for numeric fields)') help_text=_('Minimum allowed value (for numeric fields)')
) )
validation_maximum = models.BigIntegerField( validation_maximum = models.DecimalField(
max_digits=16,
decimal_places=4,
blank=True, blank=True,
null=True, null=True,
verbose_name=_('maximum value'), verbose_name=_('maximum value'),
@ -471,7 +475,7 @@ class CustomField(CloningMixin, ExportTemplatesMixin, ChangeLoggedModel):
field = forms.DecimalField( field = forms.DecimalField(
required=required, required=required,
initial=initial, initial=initial,
max_digits=12, max_digits=16,
decimal_places=4, decimal_places=4,
min_value=self.validation_minimum, min_value=self.validation_minimum,
max_value=self.validation_maximum max_value=self.validation_maximum