From 3d61eb4dae02998eed6a2d9194906959a0b91bec Mon Sep 17 00:00:00 2001 From: Brian Rosner Date: Fri, 29 Feb 2008 05:41:32 +0000 Subject: [PATCH] newforms-admin: Fixed #4641. ForeignKeyRawIdWidget now properly displays the related object value. Thanks, Matthew Flanagan for the original patch. git-svn-id: http://code.djangoproject.com/svn/django/branches/newforms-admin@7177 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/contrib/admin/tests/widgets.py | 11 +++++++++-- django/contrib/admin/widgets.py | 7 ++++--- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/django/contrib/admin/tests/widgets.py b/django/contrib/admin/tests/widgets.py index 0b204418c4..aded917612 100644 --- a/django/contrib/admin/tests/widgets.py +++ b/django/contrib/admin/tests/widgets.py @@ -7,6 +7,7 @@ WIDGET_TESTS = """ >>> from django.contrib.admin.widgets import AdminFileWidget, ForeignKeyRawIdWidget >>> from django.contrib.admin.widgets import RelatedFieldWidgetWrapper >>> from django.contrib.admin.models import LogEntry +>>> from django.contrib.auth.models import User Calling conditional_escape on the output of widget.render will simulate what happens in the template. This is easier than setting up a template and context @@ -29,10 +30,16 @@ HTML escaped. >>> print conditional_escape(w.render('test', 'test')) Currently: test
Change: +To test ForeignKeyRawIdWidget a user object must be created. Its pk is +explicitly set to 100 to avoid having to potentially overmatch in the test. + +>>> user = User.objects.create(pk=100, username='jdoe') +>>> entry = LogEntry(action_flag=1, user=user) +>>> entry.save() >>> rel = LogEntry._meta.get_field('user').rel >>> w = ForeignKeyRawIdWidget(rel) ->>> print conditional_escape(w.render('test', 'test', attrs={})) - Lookup +>>> print conditional_escape(w.render('test', entry.user.pk, attrs={})) + Lookup jdoe """ % { 'ADMIN_MEDIA_PREFIX': settings.ADMIN_MEDIA_PREFIX, diff --git a/django/contrib/admin/widgets.py b/django/contrib/admin/widgets.py index 26aacf7a03..f5c14e64f4 100644 --- a/django/contrib/admin/widgets.py +++ b/django/contrib/admin/widgets.py @@ -4,7 +4,7 @@ Form Widget classes specific to the Django admin site. from django import newforms as forms from django.utils.datastructures import MultiValueDict -from django.utils.text import capfirst +from django.utils.text import capfirst, truncate_words from django.utils.translation import ugettext as _ from django.utils.safestring import mark_safe from django.conf import settings @@ -100,9 +100,10 @@ class ForeignKeyRawIdWidget(forms.TextInput): output.append(' ' % \ (related_url, url, name)) output.append('Lookup' % settings.ADMIN_MEDIA_PREFIX) + if value: + output.append(' %s' % \ + truncate_words(self.rel.to.objects.get(pk=value), 14)) return mark_safe(u''.join(output)) - #if self.change: # TODO - #output.append(' TODO') class ManyToManyRawIdWidget(ForeignKeyRawIdWidget): """