mirror of
https://github.com/django/django.git
synced 2025-10-24 14:16:09 +00:00
Refs #33308 -- Deprecated support for passing encoded JSON string literals to JSONField & co.
JSON should be provided as literal Python objects an not in their encoded string literal forms.
This commit is contained in:
committed by
Mariusz Felisiak
parent
d3e746ace5
commit
0ff46591ac
@@ -19,6 +19,7 @@ from django.db.models import (
|
||||
ExpressionWrapper,
|
||||
F,
|
||||
IntegerField,
|
||||
JSONField,
|
||||
OuterRef,
|
||||
Q,
|
||||
Subquery,
|
||||
@@ -36,6 +37,7 @@ from django.db.models.fields.json import (
|
||||
from django.db.models.functions import Cast
|
||||
from django.test import SimpleTestCase, TestCase, skipIfDBFeature, skipUnlessDBFeature
|
||||
from django.test.utils import CaptureQueriesContext
|
||||
from django.utils.deprecation import RemovedInDjango51Warning
|
||||
|
||||
from .models import CustomJSONDecoder, JSONModel, NullableJSONModel, RelatedJSONModel
|
||||
|
||||
@@ -191,15 +193,40 @@ class TestSaveLoad(TestCase):
|
||||
obj.refresh_from_db()
|
||||
self.assertIsNone(obj.value)
|
||||
|
||||
def test_ambiguous_str_value_deprecation(self):
|
||||
msg = (
|
||||
"Providing an encoded JSON string via Value() is deprecated. Use Value([], "
|
||||
"output_field=JSONField()) instead."
|
||||
)
|
||||
with self.assertWarnsMessage(RemovedInDjango51Warning, msg):
|
||||
obj = NullableJSONModel.objects.create(value=Value("[]"))
|
||||
obj.refresh_from_db()
|
||||
self.assertEqual(obj.value, [])
|
||||
|
||||
@skipUnlessDBFeature("supports_primitives_in_json_field")
|
||||
def test_value_str_primitives_deprecation(self):
|
||||
msg = (
|
||||
"Providing an encoded JSON string via Value() is deprecated. Use "
|
||||
"Value(None, output_field=JSONField()) instead."
|
||||
)
|
||||
with self.assertWarnsMessage(RemovedInDjango51Warning, msg):
|
||||
obj = NullableJSONModel.objects.create(value=Value("null"))
|
||||
obj.refresh_from_db()
|
||||
self.assertIsNone(obj.value)
|
||||
obj = NullableJSONModel.objects.create(value=Value("invalid-json"))
|
||||
obj.refresh_from_db()
|
||||
self.assertEqual(obj.value, "invalid-json")
|
||||
|
||||
@skipUnlessDBFeature("supports_primitives_in_json_field")
|
||||
def test_json_null_different_from_sql_null(self):
|
||||
json_null = NullableJSONModel.objects.create(value=Value("null"))
|
||||
json_null = NullableJSONModel.objects.create(value=Value(None, JSONField()))
|
||||
NullableJSONModel.objects.update(value=Value(None, JSONField()))
|
||||
json_null.refresh_from_db()
|
||||
sql_null = NullableJSONModel.objects.create(value=None)
|
||||
sql_null.refresh_from_db()
|
||||
# 'null' is not equal to NULL in the database.
|
||||
self.assertSequenceEqual(
|
||||
NullableJSONModel.objects.filter(value=Value("null")),
|
||||
NullableJSONModel.objects.filter(value=Value(None, JSONField())),
|
||||
[json_null],
|
||||
)
|
||||
self.assertSequenceEqual(
|
||||
|
||||
Reference in New Issue
Block a user