summaryrefslogtreecommitdiff
path: root/tests/model_fields/models.py
diff options
context:
space:
mode:
authorsage <laymonage@gmail.com>2019-06-09 07:56:37 +0700
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2020-05-08 07:23:31 +0200
commit6789ded0a6ab797f0dcdfa6ad5d1cfa46e23abcd (patch)
tree1de598fc92480c64835b60b6ddbb461c3cd2e864 /tests/model_fields/models.py
parentf97f71f59249f1fbeebe84d4fc858d70fc456f7d (diff)
Fixed #12990, Refs #27694 -- Added JSONField model field.
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>
Diffstat (limited to 'tests/model_fields/models.py')
-rw-r--r--tests/model_fields/models.py31
1 files changed, 31 insertions, 0 deletions
diff --git a/tests/model_fields/models.py b/tests/model_fields/models.py
index a7efe199ab..a11eb0ba44 100644
--- a/tests/model_fields/models.py
+++ b/tests/model_fields/models.py
@@ -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()