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 '&nbsp;<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.

Reply via email to