Author: jbronn
Date: 2010-09-11 13:38:24 -0500 (Sat, 11 Sep 2010)
New Revision: 13752

Modified:
   django/branches/releases/1.2.X/django/contrib/admin/widgets.py
   django/branches/releases/1.2.X/django/forms/models.py
   django/branches/releases/1.2.X/tests/regressiontests/admin_widgets/tests.py
Log:
[1.2.X] Fixed #13149 -- The admin `ForeignKeyRawIdWidget` now properly handles 
non-integer values.  Thanks, Chris Adams.

Backport of r13751 from trunk.


Modified: django/branches/releases/1.2.X/django/contrib/admin/widgets.py
===================================================================
--- django/branches/releases/1.2.X/django/contrib/admin/widgets.py      
2010-09-11 18:34:40 UTC (rev 13751)
+++ django/branches/releases/1.2.X/django/contrib/admin/widgets.py      
2010-09-11 18:38:24 UTC (rev 13752)
@@ -154,9 +154,9 @@
         key = self.rel.get_related_field().name
         try:
             obj = self.rel.to._default_manager.using(self.db).get(**{key: 
value})
-        except self.rel.to.DoesNotExist:
+            return '&nbsp;<strong>%s</strong>' % escape(truncate_words(obj, 
14))
+        except (ValueError, self.rel.to.DoesNotExist):
             return ''
-        return '&nbsp;<strong>%s</strong>' % escape(truncate_words(obj, 14))
 
 class ManyToManyRawIdWidget(ForeignKeyRawIdWidget):
     """
@@ -169,7 +169,7 @@
     def render(self, name, value, attrs=None):
         attrs['class'] = 'vManyToManyRawIdAdminField'
         if value:
-            value = ','.join([str(v) for v in value])
+            value = ','.join([force_unicode(v) for v in value])
         else:
             value = ''
         return super(ManyToManyRawIdWidget, self).render(name, value, attrs)

Modified: django/branches/releases/1.2.X/django/forms/models.py
===================================================================
--- django/branches/releases/1.2.X/django/forms/models.py       2010-09-11 
18:34:40 UTC (rev 13751)
+++ django/branches/releases/1.2.X/django/forms/models.py       2010-09-11 
18:38:24 UTC (rev 13752)
@@ -996,7 +996,7 @@
         try:
             key = self.to_field_name or 'pk'
             value = self.queryset.get(**{key: value})
-        except self.queryset.model.DoesNotExist:
+        except (ValueError, self.queryset.model.DoesNotExist):
             raise ValidationError(self.error_messages['invalid_choice'])
         return value
 

Modified: 
django/branches/releases/1.2.X/tests/regressiontests/admin_widgets/tests.py
===================================================================
--- django/branches/releases/1.2.X/tests/regressiontests/admin_widgets/tests.py 
2010-09-11 18:34:40 UTC (rev 13751)
+++ django/branches/releases/1.2.X/tests/regressiontests/admin_widgets/tests.py 
2010-09-11 18:38:24 UTC (rev 13752)
@@ -1,3 +1,5 @@
+# encoding: utf-8
+
 from django import forms
 from django.contrib import admin
 from django.contrib.admin import widgets
@@ -151,3 +153,13 @@
             post_data)
         self.assertContains(response,
             'Select a valid choice. That choice is not one of the available 
choices.')
+
+    def test_invalid_target_id(self):
+
+        for test_str in ('Iñtërnâtiônàlizætiøn', "1234'", -1234):
+            # This should result in an error message, not a server exception.
+            response = self.client.post('%s/admin_widgets/event/add/' % 
self.admin_root,
+                {"band": test_str})
+
+            self.assertContains(response,
+                'Select a valid choice. That choice is not one of the 
available choices.')

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en.

Reply via email to