mirror of
https://github.com/django/django.git
synced 2025-10-31 09:41:08 +00:00
The transitional logic added to deprecate the usage of *args for
Model.save()/asave() introduced two issues that this branch fixes:
* Passing extra positional arguments no longer raised TypeError.
* Passing a positional but empty update_fields would save all fields.
Co-authored-by: Natalia <124304+nessita@users.noreply.github.com>
Backport of 28522c3c8d from main.
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
from django.db.models.signals import post_save, pre_save
|
||||
from django.test import TestCase
|
||||
from django.utils.deprecation import RemovedInDjango60Warning
|
||||
|
||||
from .models import Account, Employee, Person, Profile, ProxyEmployee
|
||||
|
||||
@@ -256,6 +257,29 @@ class UpdateOnlyFieldsTests(TestCase):
|
||||
pre_save.disconnect(pre_save_receiver)
|
||||
post_save.disconnect(post_save_receiver)
|
||||
|
||||
def test_empty_update_fields_positional_save(self):
|
||||
s = Person.objects.create(name="Sara", gender="F")
|
||||
|
||||
msg = "Passing positional arguments to save() is deprecated"
|
||||
with (
|
||||
self.assertWarnsMessage(RemovedInDjango60Warning, msg),
|
||||
self.assertNumQueries(0),
|
||||
):
|
||||
s.save(False, False, None, [])
|
||||
|
||||
async def test_empty_update_fields_positional_asave(self):
|
||||
s = await Person.objects.acreate(name="Sara", gender="F")
|
||||
# Workaround for a lack of async assertNumQueries.
|
||||
s.name = "Other"
|
||||
|
||||
msg = "Passing positional arguments to asave() is deprecated"
|
||||
with self.assertWarnsMessage(RemovedInDjango60Warning, msg):
|
||||
await s.asave(False, False, None, [])
|
||||
|
||||
# No save occurred for an empty update_fields.
|
||||
await s.arefresh_from_db()
|
||||
self.assertEqual(s.name, "Sara")
|
||||
|
||||
def test_num_queries_inheritance(self):
|
||||
s = Employee.objects.create(name="Sara", gender="F")
|
||||
s.employee_num = 1
|
||||
|
||||
Reference in New Issue
Block a user