Skip to content

Commit

Permalink
Updated tests to use uuid field as PK, QA feedback
Browse files Browse the repository at this point in the history
  • Loading branch information
AdamDonna committed May 4, 2018
1 parent f981cd1 commit 4185697
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 20 deletions.
19 changes: 8 additions & 11 deletions django/contrib/admin/options.py
Expand Up @@ -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):
Expand Down Expand Up @@ -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:
Expand Down
3 changes: 3 additions & 0 deletions 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

Expand Down Expand Up @@ -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()
Expand Down
17 changes: 8 additions & 9 deletions tests/admin_changelist/tests.py
Expand Up @@ -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',
Expand Down Expand Up @@ -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',
Expand All @@ -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):
"""
Expand Down

0 comments on commit 4185697

Please sign in to comment.