From e20e5d1557785ba71e8ef0ceb8ccb85bdc13840a Mon Sep 17 00:00:00 2001 From: Mariusz Felisiak Date: Tue, 26 Jul 2022 20:21:27 +0200 Subject: [PATCH] Fixed #33820 -- Doc'd "true"/"false"/"null" caveat for JSONField key transforms on SQLite. Thanks Johnny Metz for the report. Regression in 71ec102b01fcc85acae3819426a4e02ef423b0fa. --- docs/ref/models/querysets.txt | 16 ++++++++++++++++ docs/topics/db/queries.txt | 6 ++++++ 2 files changed, 22 insertions(+) diff --git a/docs/ref/models/querysets.txt b/docs/ref/models/querysets.txt index 47eefdb579..223bb452b0 100644 --- a/docs/ref/models/querysets.txt +++ b/docs/ref/models/querysets.txt @@ -712,6 +712,14 @@ You can also refer to fields on related models with reverse relations through pronounced if you include multiple such fields in your ``values()`` query, in which case all possible combinations will be returned. +.. admonition:: Special values for ``JSONField`` on SQLite + + Due to the way the ``JSON_EXTRACT`` and ``JSON_TYPE`` SQL functions are + implemented on SQLite, and lack of the ``BOOLEAN`` data type, + ``values()`` will return ``True``, ``False``, and ``None`` instead of + ``"true"``, ``"false"``, and ``"null"`` strings for + :class:`~django.db.models.JSONField` key transforms. + ``values_list()`` ~~~~~~~~~~~~~~~~~ @@ -782,6 +790,14 @@ not having any author:: >>> Entry.objects.values_list('authors') +.. admonition:: Special values for ``JSONField`` on SQLite + + Due to the way the ``JSON_EXTRACT`` and ``JSON_TYPE`` SQL functions are + implemented on SQLite, and lack of the ``BOOLEAN`` data type, + ``values_list()`` will return ``True``, ``False``, and ``None`` instead of + ``"true"``, ``"false"``, and ``"null"`` strings for + :class:`~django.db.models.JSONField` key transforms. + ``dates()`` ~~~~~~~~~~~ diff --git a/docs/topics/db/queries.txt b/docs/topics/db/queries.txt index 2d43e7ee32..d256545453 100644 --- a/docs/topics/db/queries.txt +++ b/docs/topics/db/queries.txt @@ -1091,6 +1091,12 @@ To query for missing keys, use the ``isnull`` lookup:: On PostgreSQL, if only one key or index is used, the SQL operator ``->`` is used. If multiple operators are used then the ``#>`` operator is used. +.. admonition:: SQLite users + + On SQLite, ``"true"``, ``"false"``, and ``"null"`` string values will + always be interpreted as ``True``, ``False``, and JSON ``null`` + respectively. + .. _containment-and-key-lookups: Containment and key lookups