Author: jbronn
Date: 2010-09-11 13:34:40 -0500 (Sat, 11 Sep 2010)
New Revision: 13751
Modified:
django/trunk/django/contrib/admin/widgets.py
django/trunk/django/forms/models.py
django/trunk/tests/regressiontests/admin_widgets/tests.py
Log:
Fixed #13149 -- The admin `ForeignKeyRawIdWidget` now properly handles
non-integer values. Thanks, Chris Adams.
Modified: django/trunk/django/contrib/admin/widgets.py
===================================================================
--- django/trunk/django/contrib/admin/widgets.py 2010-09-11 17:55:08 UTC
(rev 13750)
+++ django/trunk/django/contrib/admin/widgets.py 2010-09-11 18:34:40 UTC
(rev 13751)
@@ -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 ' <strong>%s</strong>' % escape(truncate_words(obj,
14))
+ except (ValueError, self.rel.to.DoesNotExist):
return ''
- return ' <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/trunk/django/forms/models.py
===================================================================
--- django/trunk/django/forms/models.py 2010-09-11 17:55:08 UTC (rev 13750)
+++ django/trunk/django/forms/models.py 2010-09-11 18:34:40 UTC (rev 13751)
@@ -1006,7 +1006,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/trunk/tests/regressiontests/admin_widgets/tests.py
===================================================================
--- django/trunk/tests/regressiontests/admin_widgets/tests.py 2010-09-11
17:55:08 UTC (rev 13750)
+++ django/trunk/tests/regressiontests/admin_widgets/tests.py 2010-09-11
18:34:40 UTC (rev 13751)
@@ -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.