summaryrefslogtreecommitdiff
path: root/tests/admin_widgets
diff options
context:
space:
mode:
authorJohannes Maron <info@johanneshoppe.com>2021-01-12 11:37:38 +0100
committerGitHub <noreply@github.com>2021-01-12 11:37:38 +0100
commit3071660acfbdf4b5c59457c8e9dc345d5e8894c5 (patch)
tree78b95d329ff10f4e0cd1c7b4d237d78c29b0d0bb /tests/admin_widgets
parentba3fb2e4d0aca26f6ea37d7e31488ad09043f89d (diff)
downloaddjango-3071660acfbdf4b5c59457c8e9dc345d5e8894c5.tar.gz
Fixed #29010, Fixed #29138 -- Added limit_choices_to and to_field support to autocomplete fields.
* Fixed #29010 -- Added limit_choices_to support to autocomplete fields. * Fixed #29138 -- Allowed autocomplete fields to target a custom to_field rather than the PK.
Diffstat (limited to 'tests/admin_widgets')
-rw-r--r--tests/admin_widgets/models.py3
-rw-r--r--tests/admin_widgets/test_autocomplete_widget.py19
-rw-r--r--tests/admin_widgets/tests.py8
3 files changed, 17 insertions, 13 deletions
diff --git a/tests/admin_widgets/models.py b/tests/admin_widgets/models.py
index 88bf2b8fca..85f71749fd 100644
--- a/tests/admin_widgets/models.py
+++ b/tests/admin_widgets/models.py
@@ -19,6 +19,7 @@ class Member(models.Model):
class Band(models.Model):
+ uuid = models.UUIDField(unique=True, default=uuid.uuid4)
name = models.CharField(max_length=100)
style = models.CharField(max_length=20)
members = models.ManyToManyField(Member)
@@ -36,7 +37,7 @@ class UnsafeLimitChoicesTo(models.Model):
class Album(models.Model):
- band = models.ForeignKey(Band, models.CASCADE)
+ band = models.ForeignKey(Band, models.CASCADE, to_field='uuid')
featuring = models.ManyToManyField(Band, related_name='featured')
name = models.CharField(max_length=100)
cover_art = models.FileField(upload_to='albums')
diff --git a/tests/admin_widgets/test_autocomplete_widget.py b/tests/admin_widgets/test_autocomplete_widget.py
index 2cb2e8fbf5..d8ee7e9f3a 100644
--- a/tests/admin_widgets/test_autocomplete_widget.py
+++ b/tests/admin_widgets/test_autocomplete_widget.py
@@ -14,12 +14,12 @@ class AlbumForm(forms.ModelForm):
fields = ['band', 'featuring']
widgets = {
'band': AutocompleteSelect(
- Album._meta.get_field('band').remote_field,
+ Album._meta.get_field('band'),
admin.site,
attrs={'class': 'my-class'},
),
'featuring': AutocompleteSelect(
- Album._meta.get_field('featuring').remote_field,
+ Album._meta.get_field('featuring'),
admin.site,
)
}
@@ -54,9 +54,12 @@ class AutocompleteMixinTests(TestCase):
'data-ajax--cache': 'true',
'data-ajax--delay': 250,
'data-ajax--type': 'GET',
- 'data-ajax--url': '/admin_widgets/band/autocomplete/',
+ 'data-ajax--url': '/autocomplete/',
'data-theme': 'admin-autocomplete',
'data-allow-clear': 'false',
+ 'data-app-label': 'admin_widgets',
+ 'data-field-name': 'band',
+ 'data-model-name': 'album',
'data-placeholder': ''
})
@@ -76,19 +79,19 @@ class AutocompleteMixinTests(TestCase):
self.assertJSONEqual(attrs['data-allow-clear'], False)
def test_get_url(self):
- rel = Album._meta.get_field('band').remote_field
+ rel = Album._meta.get_field('band')
w = AutocompleteSelect(rel, admin.site)
url = w.get_url()
- self.assertEqual(url, '/admin_widgets/band/autocomplete/')
+ self.assertEqual(url, '/autocomplete/')
def test_render_options(self):
beatles = Band.objects.create(name='The Beatles', style='rock')
who = Band.objects.create(name='The Who', style='rock')
# With 'band', a ForeignKey.
- form = AlbumForm(initial={'band': beatles.pk})
+ form = AlbumForm(initial={'band': beatles.uuid})
output = form.as_table()
- selected_option = '<option value="%s" selected>The Beatles</option>' % beatles.pk
- option = '<option value="%s">The Who</option>' % who.pk
+ selected_option = '<option value="%s" selected>The Beatles</option>' % beatles.uuid
+ option = '<option value="%s">The Who</option>' % who.uuid
self.assertIn(selected_option, output)
self.assertNotIn(option, output)
# With 'featuring', a ManyToManyField.
diff --git a/tests/admin_widgets/tests.py b/tests/admin_widgets/tests.py
index 334a534907..3c41d9cdfa 100644
--- a/tests/admin_widgets/tests.py
+++ b/tests/admin_widgets/tests.py
@@ -539,13 +539,13 @@ class ForeignKeyRawIdWidgetTest(TestCase):
w = widgets.ForeignKeyRawIdWidget(rel, widget_admin_site)
self.assertHTMLEqual(
- w.render('test', band.pk, attrs={}),
- '<input type="text" name="test" value="%(bandpk)s" '
+ w.render('test', band.uuid, attrs={}),
+ '<input type="text" name="test" value="%(banduuid)s" '
'class="vForeignKeyRawIdAdminField">'
- '<a href="/admin_widgets/band/?_to_field=id" class="related-lookup" '
+ '<a href="/admin_widgets/band/?_to_field=uuid" class="related-lookup" '
'id="lookup_id_test" title="Lookup"></a>&nbsp;<strong>'
'<a href="/admin_widgets/band/%(bandpk)s/change/">Linkin Park</a>'
- '</strong>' % {'bandpk': band.pk}
+ '</strong>' % {'banduuid': band.uuid, 'bandpk': band.pk}
)
def test_relations_to_non_primary_key(self):