diff options
Diffstat (limited to 'tests/admin_widgets')
| -rw-r--r-- | tests/admin_widgets/models.py | 25 | ||||
| -rw-r--r-- | tests/admin_widgets/test_autocomplete_widget.py | 23 | ||||
| -rw-r--r-- | tests/admin_widgets/tests.py | 14 | ||||
| -rw-r--r-- | tests/admin_widgets/widgetadmin.py | 4 |
4 files changed, 61 insertions, 5 deletions
diff --git a/tests/admin_widgets/models.py b/tests/admin_widgets/models.py index 85f71749fd..85ba6c4f36 100644 --- a/tests/admin_widgets/models.py +++ b/tests/admin_widgets/models.py @@ -18,7 +18,11 @@ class Member(models.Model): return self.name -class Band(models.Model): +class Artist(models.Model): + pass + + +class Band(Artist): uuid = models.UUIDField(unique=True, default=uuid.uuid4) name = models.CharField(max_length=100) style = models.CharField(max_length=20) @@ -47,6 +51,25 @@ class Album(models.Model): return self.name +class ReleaseEvent(models.Model): + """ + Used to check that autocomplete widget correctly resolves attname for FK as + PK example. + """ + album = models.ForeignKey(Album, models.CASCADE, primary_key=True) + name = models.CharField(max_length=100) + + class Meta: + ordering = ['name'] + + def __str__(self): + return self.name + + +class VideoStream(models.Model): + release_event = models.ForeignKey(ReleaseEvent, models.CASCADE) + + class HiddenInventoryManager(models.Manager): def get_queryset(self): return super().get_queryset().filter(hidden=False) diff --git a/tests/admin_widgets/test_autocomplete_widget.py b/tests/admin_widgets/test_autocomplete_widget.py index d8ee7e9f3a..279acfe615 100644 --- a/tests/admin_widgets/test_autocomplete_widget.py +++ b/tests/admin_widgets/test_autocomplete_widget.py @@ -5,7 +5,7 @@ from django.forms import ModelChoiceField from django.test import TestCase, override_settings from django.utils import translation -from .models import Album, Band +from .models import Album, Band, ReleaseEvent, VideoStream class AlbumForm(forms.ModelForm): @@ -41,6 +41,18 @@ class RequiredBandForm(forms.Form): ) +class VideoStreamForm(forms.ModelForm): + class Meta: + model = VideoStream + fields = ['release_event'] + widgets = { + 'release_event': AutocompleteSelect( + VideoStream._meta.get_field('release_event'), + admin.site, + ), + } + + @override_settings(ROOT_URLCONF='admin_widgets.urls') class AutocompleteMixinTests(TestCase): empty_option = '<option value=""></option>' @@ -114,6 +126,15 @@ class AutocompleteMixinTests(TestCase): output = form.as_table() self.assertNotIn(self.empty_option, output) + def test_render_options_fk_as_pk(self): + beatles = Band.objects.create(name='The Beatles', style='rock') + rubber_soul = Album.objects.create(name='Rubber Soul', band=beatles) + release_event = ReleaseEvent.objects.create(name='Test Target', album=rubber_soul) + form = VideoStreamForm(initial={'release_event': release_event.pk}) + output = form.as_table() + selected_option = '<option value="%s" selected>Test Target</option>' % release_event.pk + self.assertIn(selected_option, output) + def test_media(self): rel = Album._meta.get_field('band').remote_field base_files = ( diff --git a/tests/admin_widgets/tests.py b/tests/admin_widgets/tests.py index 3c41d9cdfa..f701f1abff 100644 --- a/tests/admin_widgets/tests.py +++ b/tests/admin_widgets/tests.py @@ -24,7 +24,7 @@ from django.utils import translation from .models import ( Advisor, Album, Band, Bee, Car, Company, Event, Honeycomb, Individual, Inventory, Member, MyFileField, Profile, School, Student, - UnsafeLimitChoicesTo, + UnsafeLimitChoicesTo, VideoStream, ) from .widgetadmin import site as widget_admin_site @@ -624,7 +624,17 @@ class ForeignKeyRawIdWidgetTest(TestCase): self.assertHTMLEqual( w.render('test', None), '<input type="text" name="test" class="vForeignKeyRawIdAdminField">\n' - '<a href="/admin_widgets/band/?name=%22%26%3E%3Cescapeme&_to_field=id" ' + '<a href="/admin_widgets/band/?name=%22%26%3E%3Cescapeme&_to_field=artist_ptr" ' + 'class="related-lookup" id="lookup_id_test" title="Lookup"></a>' + ) + + def test_render_fk_as_pk_model(self): + rel = VideoStream._meta.get_field('release_event').remote_field + w = widgets.ForeignKeyRawIdWidget(rel, widget_admin_site) + self.assertHTMLEqual( + w.render('test', None), + '<input type="text" name="test" class="vForeignKeyRawIdAdminField">\n' + '<a href="/admin_widgets/releaseevent/?_to_field=album" ' 'class="related-lookup" id="lookup_id_test" title="Lookup"></a>' ) diff --git a/tests/admin_widgets/widgetadmin.py b/tests/admin_widgets/widgetadmin.py index a471a362fb..a025bc82a7 100644 --- a/tests/admin_widgets/widgetadmin.py +++ b/tests/admin_widgets/widgetadmin.py @@ -2,7 +2,7 @@ from django.contrib import admin from .models import ( Advisor, Album, Band, Bee, Car, CarTire, Event, Inventory, Member, Profile, - School, User, + ReleaseEvent, School, User, VideoStream, ) @@ -47,6 +47,8 @@ site.register(Member) site.register(Band) site.register(Event, EventAdmin) site.register(Album, AlbumAdmin) +site.register(ReleaseEvent, search_fields=['name']) +site.register(VideoStream, autocomplete_fields=['release_event']) site.register(Inventory) |
