mirror of
https://github.com/django/django.git
synced 2025-10-24 06:06:09 +00:00
Thanks to Adam Johnson, Carlton Gibson, Mariusz Felisiak, and Raphael Michel for mentoring this Google Summer of Code 2019 project and everyone else who helped with the patch. Special thanks to Mads Jensen, Nick Pope, and Simon Charette for extensive reviews. Co-authored-by: Mariusz Felisiak <felisiak.mariusz@gmail.com>
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import json
|
||||
import os
|
||||
import tempfile
|
||||
import uuid
|
||||
@@ -7,6 +8,7 @@ from django.contrib.contenttypes.fields import (
|
||||
)
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.core.files.storage import FileSystemStorage
|
||||
from django.core.serializers.json import DjangoJSONEncoder
|
||||
from django.db import models
|
||||
from django.db.models.fields.files import ImageFieldFile
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
@@ -332,6 +334,35 @@ if Image:
|
||||
width_field='headshot_width')
|
||||
|
||||
|
||||
class CustomJSONDecoder(json.JSONDecoder):
|
||||
def __init__(self, object_hook=None, *args, **kwargs):
|
||||
return super().__init__(object_hook=self.as_uuid, *args, **kwargs)
|
||||
|
||||
def as_uuid(self, dct):
|
||||
if 'uuid' in dct:
|
||||
dct['uuid'] = uuid.UUID(dct['uuid'])
|
||||
return dct
|
||||
|
||||
|
||||
class JSONModel(models.Model):
|
||||
value = models.JSONField()
|
||||
|
||||
class Meta:
|
||||
required_db_features = {'supports_json_field'}
|
||||
|
||||
|
||||
class NullableJSONModel(models.Model):
|
||||
value = models.JSONField(blank=True, null=True)
|
||||
value_custom = models.JSONField(
|
||||
encoder=DjangoJSONEncoder,
|
||||
decoder=CustomJSONDecoder,
|
||||
null=True,
|
||||
)
|
||||
|
||||
class Meta:
|
||||
required_db_features = {'supports_json_field'}
|
||||
|
||||
|
||||
class AllFieldsModel(models.Model):
|
||||
big_integer = models.BigIntegerField()
|
||||
binary = models.BinaryField()
|
||||
|
||||
Reference in New Issue
Block a user