1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

10348 add decimal custom field (#10422)

* 10348 add decimal custom field

* 10348 fix tests

* 10348 add documentation

* Rearrange custom fields to be ordered consistently

* Rename number_field to integer_field for clarity

* Clean up validation logic

* Apply suggested changes from PR

* Store decimal custom field values natively

* Fix filter test

* Update custom field model migrations to use new encoder

Co-authored-by: jeremystretch <jstretch@ns1.com>
This commit is contained in:
Arthur Hanson
2022-09-30 13:03:24 -07:00
committed by GitHub
parent ada5c58acf
commit af8bb0c4b9
26 changed files with 343 additions and 207 deletions

View File

@@ -3,8 +3,6 @@ from django import forms
from django.conf import settings
from django_filters.constants import EMPTY_VALUES
from utilities.forms import MACAddressField
def multivalue_field_factory(field_class):
"""
@@ -31,7 +29,7 @@ def multivalue_field_factory(field_class):
for v in value:
super().validate(v)
return type('MultiValue{}'.format(field_class.__name__), (NewField,), dict())
return type(f'MultiValue{field_class.__name__}', (NewField,), dict())
#
@@ -54,6 +52,10 @@ class MultiValueNumberFilter(django_filters.MultipleChoiceFilter):
field_class = multivalue_field_factory(forms.IntegerField)
class MultiValueDecimalFilter(django_filters.MultipleChoiceFilter):
field_class = multivalue_field_factory(forms.DecimalField)
class MultiValueTimeFilter(django_filters.MultipleChoiceFilter):
field_class = multivalue_field_factory(forms.TimeField)

17
netbox/utilities/json.py Normal file
View File

@@ -0,0 +1,17 @@
import decimal
from django.core.serializers.json import DjangoJSONEncoder
__all__ = (
'CustomFieldJSONEncoder',
)
class CustomFieldJSONEncoder(DjangoJSONEncoder):
"""
Override Django's built-in JSON encoder to save decimal values as JSON numbers.
"""
def default(self, o):
if isinstance(o, decimal.Decimal):
return float(o)
return super().default(o)