From 4185697417e27e8882eab694996b8968ab5d900c Mon Sep 17 00:00:00 2001 From: Adam Donaghy Date: Sat, 5 May 2018 01:31:06 +1000 Subject: [PATCH] Updated tests to use uuid field as PK, QA feedback --- django/contrib/admin/options.py | 19 ++++++++----------- tests/admin_changelist/models.py | 3 +++ tests/admin_changelist/tests.py | 17 ++++++++--------- 3 files changed, 19 insertions(+), 20 deletions(-) diff --git a/django/contrib/admin/options.py b/django/contrib/admin/options.py index 4ce4631a68e6d..475d7d0d7ed60 100644 --- a/django/contrib/admin/options.py +++ b/django/contrib/admin/options.py @@ -1511,15 +1511,11 @@ def add_view(self, request, form_url='', extra_context=None): def change_view(self, request, object_id, form_url='', extra_context=None): return self.changeform_view(request, object_id, form_url, extra_context) - def get_edited_object_ids(self, request, prefix): - # Get the objects ids to filter the queryset to get only the objects that will be updated. - # Matching on anything incase we come up against non-numeric fields - regexp = re.compile('{prefix}-(\w+)-id$'.format(prefix=prefix)) - object_ids = [] - for key, value in request.POST.items(): - if regexp.match(key): - object_ids.append(value) - return object_ids + def get_edited_object_pks(self, request, pk_pattern): + regexp = re.compile('{prefix}-\d+-{pk_name}$'.format(prefix=pk_pattern, pk_name=self.model._meta.pk.name)) + return [ + value for key, value in request.POST.items() if regexp.match(key) + ] @csrf_protect_m def changelist_view(self, request, extra_context=None): @@ -1612,9 +1608,10 @@ def changelist_view(self, request, extra_context=None): # Handle POSTed bulk-edit data. if request.method == 'POST' and cl.list_editable and '_save' in request.POST: FormSet = self.get_changelist_formset(request) - object_ids = self.get_edited_object_ids(request, FormSet.get_default_prefix()) + object_pks = self.get_edited_object_pks(request, FormSet.get_default_prefix()) + print(object_pks) formset = cl.formset = FormSet(request.POST, request.FILES, - queryset=self.get_queryset(request).filter(pk__in=object_ids)) + queryset=self.get_queryset(request).filter(pk__in=object_pks)) if formset.is_valid(): changecount = 0 for form in formset.forms: diff --git a/tests/admin_changelist/models.py b/tests/admin_changelist/models.py index fb5f03cbd6117..c64b27219984e 100644 --- a/tests/admin_changelist/models.py +++ b/tests/admin_changelist/models.py @@ -1,3 +1,5 @@ +import uuid + from django.db import models from django.utils.encoding import python_2_unicode_compatible @@ -75,6 +77,7 @@ class Invitation(models.Model): class Swallow(models.Model): + uuid = models.UUIDField(primary_key=True, default=uuid.uuid4) origin = models.CharField(max_length=255) load = models.FloatField() speed = models.FloatField() diff --git a/tests/admin_changelist/tests.py b/tests/admin_changelist/tests.py index 2c7560f938575..e3c4d14f9a1d0 100644 --- a/tests/admin_changelist/tests.py +++ b/tests/admin_changelist/tests.py @@ -669,9 +669,9 @@ def test_multiuser_edit(self): 'form-INITIAL_FORMS': '3', 'form-MIN_NUM_FORMS': '0', 'form-MAX_NUM_FORMS': '1000', - 'form-0-id': str(d.pk), - 'form-1-id': str(c.pk), - 'form-2-id': str(a.pk), + 'form-0-uuid': str(d.pk), + 'form-1-uuid': str(c.pk), + 'form-2-uuid': str(a.pk), 'form-0-load': '9.0', 'form-0-speed': '9.0', 'form-1-load': '5.0', @@ -713,12 +713,11 @@ def test_get_edited_object_ids(self): superuser = self._create_superuser('superuser') self.client.force_login(superuser) changelist_url = reverse('admin:admin_changelist_swallow_changelist') - m = SwallowAdmin(Swallow, custom_site) data = { - 'form-0-id': str(a.pk), - 'form-1-id': str(b.pk), - 'form-2-id': str(c.pk), + 'form-0-uuid': str(a.pk), + 'form-1-uuid': str(b.pk), + 'form-2-uuid': str(c.pk), 'form-0-load': '9.0', 'form-0-speed': '9.0', 'form-1-load': '5.0', @@ -728,8 +727,8 @@ def test_get_edited_object_ids(self): '_save': 'Save', } request = self.factory.post(changelist_url, data=data) - ids = m.get_edited_object_ids(request, 'form') - self.assertItemsEqual(ids, [str(a.pk), str(b.pk), str(c.pk)]) + ids = m.get_edited_object_pks(request, 'form') + self.assertEqual(ids, [str(c.pk), str(a.pk), str(b.pk)]) def test_deterministic_order_for_unordered_model(self): """