mirror of
https://github.com/django/django.git
synced 2025-08-04 10:59:45 +00:00
Fixed #36453 -- Made When.condition resolve with for_save=False.
Some checks failed
Linters / flake8 (push) Waiting to run
Linters / isort (push) Waiting to run
Linters / black (push) Waiting to run
Tests / Windows, SQLite, Python 3.13 (push) Waiting to run
Tests / JavaScript tests (push) Waiting to run
Docs / docs (push) Has been cancelled
Docs / blacken-docs (push) Has been cancelled
Some checks failed
Linters / flake8 (push) Waiting to run
Linters / isort (push) Waiting to run
Linters / black (push) Waiting to run
Tests / Windows, SQLite, Python 3.13 (push) Waiting to run
Tests / JavaScript tests (push) Waiting to run
Docs / docs (push) Has been cancelled
Docs / blacken-docs (push) Has been cancelled
Value(None, JSONField()) when used in When.condition incorrectly resolved with
for_save=True, resulting in the value being serialized as SQL NULL instead of
JSON null.
Regression in c1fa3fdd04
.
Thanks to Thomas McKay for the report, and to David Sanders and Simon Charettes
for the review.
Co-authored-by: Sarah Boyce <42296566+sarahboyce@users.noreply.github.com>
This commit is contained in:
parent
12c1557060
commit
104cbfd44b
3 changed files with 32 additions and 0 deletions
|
@ -29,6 +29,7 @@ from django.db.models import (
|
|||
FloatField,
|
||||
Func,
|
||||
IntegerField,
|
||||
JSONField,
|
||||
Max,
|
||||
Min,
|
||||
Model,
|
||||
|
@ -83,6 +84,7 @@ from .models import (
|
|||
Company,
|
||||
Employee,
|
||||
Experiment,
|
||||
JSONFieldModel,
|
||||
Manager,
|
||||
Number,
|
||||
RemoteEmployee,
|
||||
|
@ -367,6 +369,21 @@ class BasicExpressionsTests(TestCase):
|
|||
Number.objects.all(), [None, None], lambda n: n.float, ordered=False
|
||||
)
|
||||
|
||||
@skipUnlessDBFeature("supports_json_field")
|
||||
def test_update_jsonfield_case_when_key_is_null(self):
|
||||
obj = JSONFieldModel.objects.create(data={"key": None})
|
||||
updated = JSONFieldModel.objects.update(
|
||||
data=Case(
|
||||
When(
|
||||
data__key=Value(None, JSONField()),
|
||||
then=Value({"key": "something"}, JSONField()),
|
||||
),
|
||||
)
|
||||
)
|
||||
self.assertEqual(updated, 1)
|
||||
obj.refresh_from_db()
|
||||
self.assertEqual(obj.data, {"key": "something"})
|
||||
|
||||
def test_filter_with_join(self):
|
||||
# F Expressions can also span joins
|
||||
Company.objects.update(point_of_contact=F("ceo"))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue