Author: kmtracey Date: 2010-03-01 20:28:49 -0600 (Mon, 01 Mar 2010) New Revision: 12648
Modified: django/trunk/django/contrib/admin/widgets.py django/trunk/tests/regressiontests/admin_widgets/tests.py django/trunk/tests/regressiontests/admin_widgets/widgetadmin.py Log: Fixed #11465: Ensure nonexistent pks enterd in an admin raw id field do not cause a server error. Thanks for report and initial patch sa...@wp.pl. Modified: django/trunk/django/contrib/admin/widgets.py =================================================================== --- django/trunk/django/contrib/admin/widgets.py 2010-03-02 00:00:08 UTC (rev 12647) +++ django/trunk/django/contrib/admin/widgets.py 2010-03-02 02:28:49 UTC (rev 12648) @@ -152,7 +152,10 @@ def label_for_value(self, value): key = self.rel.get_related_field().name - obj = self.rel.to._default_manager.using(self.db).get(**{key: value}) + try: + obj = self.rel.to._default_manager.using(self.db).get(**{key: value}) + except self.rel.to.DoesNotExist: + return '' return ' <strong>%s</strong>' % escape(truncate_words(obj, 14)) class ManyToManyRawIdWidget(ForeignKeyRawIdWidget): Modified: django/trunk/tests/regressiontests/admin_widgets/tests.py =================================================================== --- django/trunk/tests/regressiontests/admin_widgets/tests.py 2010-03-02 00:00:08 UTC (rev 12647) +++ django/trunk/tests/regressiontests/admin_widgets/tests.py 2010-03-02 02:28:49 UTC (rev 12648) @@ -127,3 +127,27 @@ def test_changelist_foreignkey(self): response = self.client.get('%s/admin_widgets/car/' % self.admin_root) self.failUnless('%s/auth/user/add/' % self.admin_root in response.content) + +class AdminForeignKeyRawIdWidget(DjangoTestCase): + fixtures = ["admin-widgets-users.xml"] + admin_root = '/widget_admin' + + def setUp(self): + self.client.login(username="super", password="secret") + + def tearDown(self): + self.client.logout() + + def test_nonexistent_target_id(self): + band = models.Band.objects.create(name='Bogey Blues') + pk = band.pk + band.delete() + post_data = { + "band": u'%s' % pk, + } + # Try posting with a non-existent pk in a raw id field: this + # should result in an error message, not a server exception. + response = self.client.post('%s/admin_widgets/event/add/' % self.admin_root, + post_data) + self.assertContains(response, + 'Select a valid choice. That choice is not one of the available choices.') Modified: django/trunk/tests/regressiontests/admin_widgets/widgetadmin.py =================================================================== --- django/trunk/tests/regressiontests/admin_widgets/widgetadmin.py 2010-03-02 00:00:08 UTC (rev 12647) +++ django/trunk/tests/regressiontests/admin_widgets/widgetadmin.py 2010-03-02 02:28:49 UTC (rev 12648) @@ -19,8 +19,12 @@ return db_field.formfield(**kwargs) return super(CarTireAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs) +class EventAdmin(admin.ModelAdmin): + raw_id_fields = ['band'] + site = WidgetAdmin(name='widget-admin') site.register(models.User) site.register(models.Car, CarAdmin) site.register(models.CarTire, CarTireAdmin) +site.register(models.Event, EventAdmin) -- You received this message because you are subscribed to the Google Groups "Django updates" group. To post to this group, send email to django-upda...@googlegroups.com. To unsubscribe from this group, send email to django-updates+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-updates?hl=en.