editor drm voodoo: treat decimals properly

This commit is contained in:
Laura Klünder 2018-11-22 18:57:33 +01:00
parent e778c50f2e
commit d2ff1b522d
2 changed files with 6 additions and 3 deletions

View file

@ -1,5 +1,6 @@
import typing import typing
from collections import OrderedDict from collections import OrderedDict
from decimal import Decimal
from itertools import chain from itertools import chain
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
@ -49,6 +50,9 @@ class ChangedObject(models.Model):
self._m2m_removed_cache = {name: set(values) for name, values in self.m2m_removed.items()} self._m2m_removed_cache = {name: set(values) for name, values in self.m2m_removed.items()}
if model_class is not None: if model_class is not None:
self.model_class = model_class self.model_class = model_class
for field in self.model_class._meta.get_fields():
if field.name in self.updated_fields and isinstance(field, DecimalField):
self.updated_fields[field.name] = Decimal(self.updated_fields[field.name])
@property @property
def model_class(self) -> typing.Optional[typing.Type[models.Model]]: def model_class(self) -> typing.Optional[typing.Type[models.Model]]:
@ -247,8 +251,6 @@ class ChangedObject(models.Model):
if isinstance(field, I18nField): if isinstance(field, I18nField):
for lang, subvalue in value.items(): for lang, subvalue in value.items():
self.updated_fields['%s__i18n__%s' % (field.name, lang)] = subvalue self.updated_fields['%s__i18n__%s' % (field.name, lang)] = subvalue
elif isinstance(field, DecimalField):
self.updated_fields[field.name] = None if value is None else str(value)
elif isinstance(field, (CharField, TextField)): elif isinstance(field, (CharField, TextField)):
self.updated_fields[field.name] = None if field.null and not value else field.get_prep_value(value) self.updated_fields[field.name] = None if field.null and not value else field.get_prep_value(value)
else: else:

View file

@ -4,6 +4,7 @@ import typing
from django.conf import settings from django.conf import settings
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.core.serializers.json import DjangoJSONEncoder
from django.db import models from django.db import models
from django.utils.functional import cached_property, lazy from django.utils.functional import cached_property, lazy
from django.utils.text import format_lazy from django.utils.text import format_lazy
@ -122,7 +123,7 @@ class JSONField(models.TextField):
return value return value
def get_prep_value(self, value): def get_prep_value(self, value):
return json.dumps(value) return json.dumps(value, cls=DjangoJSONEncoder)
def value_to_string(self, obj): def value_to_string(self, obj):
value = self.value_from_object(obj) value = self.value_from_object(obj)