summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorWill Koster <ddsnowboard@gmail.com>2016-05-25 15:33:35 -0500
committerTim Graham <timograham@gmail.com>2016-06-03 10:00:53 -0400
commit9899347641b2d3b4457cc99203a2b06504b32a16 (patch)
tree0d6852e40b18d011d3e9db16d68569f8d5c436f3 /tests
parent44c7e5d3740edf796591ea3a89b0ff085534f225 (diff)
Fixed #26638 -- Allowed callable arguments for QuerySet.get_or_create()/update_or_create() defaults.
Diffstat (limited to 'tests')
-rw-r--r--tests/get_or_create/tests.py26
1 files changed, 26 insertions, 0 deletions
diff --git a/tests/get_or_create/tests.py b/tests/get_or_create/tests.py
index 0f790e67b2..84f8261a92 100644
--- a/tests/get_or_create/tests.py
+++ b/tests/get_or_create/tests.py
@@ -146,6 +146,25 @@ class GetOrCreateTests(TestCase):
self.assertFalse(created)
self.assertEqual(obj, obj2)
+ def test_callable_defaults(self):
+ """
+ Callables in `defaults` are evaluated if the instance is created.
+ """
+ obj, created = Person.objects.get_or_create(
+ first_name="George",
+ defaults={"last_name": "Harrison", "birthday": lambda: date(1943, 2, 25)},
+ )
+ self.assertTrue(created)
+ self.assertEqual(date(1943, 2, 25), obj.birthday)
+
+ def test_callable_defaults_not_called(self):
+ def raise_exception():
+ raise AssertionError
+ obj, created = Person.objects.get_or_create(
+ first_name="John", last_name="Lennon",
+ defaults={"birthday": lambda: raise_exception()},
+ )
+
class GetOrCreateTestsWithManualPKs(TestCase):
@@ -387,3 +406,10 @@ class UpdateOrCreateTests(TestCase):
)
self.assertFalse(created)
self.assertEqual(obj.defaults, 'another testing')
+
+ def test_update_callable_default(self):
+ obj, created = Person.objects.update_or_create(
+ first_name='George', last_name='Harrison',
+ defaults={'birthday': lambda: date(1943, 2, 25)},
+ )
+ self.assertEqual(obj.birthday, date(1943, 2, 25))