editor drm voodoo: treat decimals properly
This commit is contained in:
parent
e778c50f2e
commit
d2ff1b522d
2 changed files with 6 additions and 3 deletions
|
@ -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:
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue