mirror of
https://github.com/django/django.git
synced 2025-08-15 00:00:47 +00:00
Fixed 35561 -- Made *args and **kwargs parsing more strict in Model.save()/asave().
This commit is contained in:
parent
88966bc2fe
commit
e56a32b89b
2 changed files with 85 additions and 37 deletions
|
@ -239,6 +239,23 @@ class ModelInstanceCreationTests(TestCase):
|
|||
):
|
||||
a.save(False, False, None, None, None)
|
||||
|
||||
def test_save_conflicting_positional_and_named_arguments(self):
|
||||
a = Article()
|
||||
cases = [
|
||||
("force_insert", True, [42]),
|
||||
("force_update", None, [42, 41]),
|
||||
("using", "some-db", [42, 41, 40]),
|
||||
("update_fields", ["foo"], [42, 41, 40, 39]),
|
||||
]
|
||||
for param_name, param_value, args in cases:
|
||||
with self.subTest(param_name=param_name):
|
||||
msg = f"Model.save() got multiple values for argument '{param_name}'"
|
||||
with (
|
||||
self.assertWarns(RemovedInDjango60Warning),
|
||||
self.assertRaisesMessage(TypeError, msg),
|
||||
):
|
||||
a.save(*args, **{param_name: param_value})
|
||||
|
||||
async def test_asave_deprecation(self):
|
||||
a = Article(headline="original", pub_date=datetime(2014, 5, 16))
|
||||
msg = "Passing positional arguments to asave() is deprecated"
|
||||
|
@ -275,6 +292,23 @@ class ModelInstanceCreationTests(TestCase):
|
|||
):
|
||||
await a.asave(False, False, None, None, None)
|
||||
|
||||
async def test_asave_conflicting_positional_and_named_arguments(self):
|
||||
a = Article()
|
||||
cases = [
|
||||
("force_insert", True, [42]),
|
||||
("force_update", None, [42, 41]),
|
||||
("using", "some-db", [42, 41, 40]),
|
||||
("update_fields", ["foo"], [42, 41, 40, 39]),
|
||||
]
|
||||
for param_name, param_value, args in cases:
|
||||
with self.subTest(param_name=param_name):
|
||||
msg = f"Model.asave() got multiple values for argument '{param_name}'"
|
||||
with (
|
||||
self.assertWarns(RemovedInDjango60Warning),
|
||||
self.assertRaisesMessage(TypeError, msg),
|
||||
):
|
||||
await a.asave(*args, **{param_name: param_value})
|
||||
|
||||
@ignore_warnings(category=RemovedInDjango60Warning)
|
||||
def test_save_positional_arguments(self):
|
||||
a = Article.objects.create(headline="original", pub_date=datetime(2014, 5, 16))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue