diff options
author | Johannes Maron <info@johanneshoppe.com> | 2021-01-12 11:37:38 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-01-12 11:37:38 +0100 |
commit | 3071660acfbdf4b5c59457c8e9dc345d5e8894c5 (patch) | |
tree | 78b95d329ff10f4e0cd1c7b4d237d78c29b0d0bb /tests/admin_widgets | |
parent | ba3fb2e4d0aca26f6ea37d7e31488ad09043f89d (diff) | |
download | django-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.py | 3 | ||||
-rw-r--r-- | tests/admin_widgets/test_autocomplete_widget.py | 19 | ||||
-rw-r--r-- | tests/admin_widgets/tests.py | 8 |
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> <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): |