diff --git a/django/contrib/admin/tests/__init__.py b/django/contrib/admin/tests/__init__.py
deleted file mode 100644
index ba00426123..0000000000
--- a/django/contrib/admin/tests/__init__.py
+++ /dev/null
@@ -1,5 +0,0 @@
-from django.contrib.admin.tests.widgets import WIDGET_TESTS
-
-__test__ = {
- 'WIDGET_TESTS': WIDGET_TESTS,
-}
diff --git a/django/contrib/admin/tests/widgets.py b/django/contrib/admin/tests/widgets.py
deleted file mode 100644
index 3b87c8aa5a..0000000000
--- a/django/contrib/admin/tests/widgets.py
+++ /dev/null
@@ -1,47 +0,0 @@
-from django.conf import settings
-
-WIDGET_TESTS = """
->>> from datetime import datetime
->>> from django.utils.html import escape, conditional_escape
->>> from django.contrib.admin.widgets import FilteredSelectMultiple, AdminSplitDateTime
->>> 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
-for each test.
-
-Make sure that the Admin widgets render properly, that is, without their extra
-HTML escaped.
-
->>> w = FilteredSelectMultiple('test', False)
->>> print conditional_escape(w.render('test', 'test'))
-
-
-
->>> w = AdminSplitDateTime()
->>> print conditional_escape(w.render('test', datetime(2007, 12, 1, 9, 30)))
-
Date: Time:
-
->>> w = AdminFileWidget()
->>> 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', entry.user.pk, attrs={}))
-jdoe
-
-""" % {
- 'ADMIN_MEDIA_PREFIX': settings.ADMIN_MEDIA_PREFIX,
- 'MEDIA_URL': settings.MEDIA_URL
-}
diff --git a/django/contrib/admin/widgets.py b/django/contrib/admin/widgets.py
index 9072a961fd..9464107c7e 100644
--- a/django/contrib/admin/widgets.py
+++ b/django/contrib/admin/widgets.py
@@ -102,9 +102,12 @@ class ForeignKeyRawIdWidget(forms.TextInput):
(related_url, url, name))
output.append('' % settings.ADMIN_MEDIA_PREFIX)
if value:
- output.append(' %s' % \
- truncate_words(self.rel.to.objects.get(pk=value), 14))
+ output.append(self.label_for_value(value))
return mark_safe(u''.join(output))
+
+ def label_for_value(self, value):
+ return ' %s' % \
+ truncate_words(self.rel.to.objects.get(pk=value), 14)
class ManyToManyRawIdWidget(ForeignKeyRawIdWidget):
"""
@@ -121,6 +124,9 @@ class ManyToManyRawIdWidget(ForeignKeyRawIdWidget):
else:
value = ''
return super(ManyToManyRawIdWidget, self).render(name, value, attrs)
+
+ def label_for_value(self, value):
+ return ''
def value_from_datadict(self, data, files, name):
value = data.get(name, None)
diff --git a/tests/regressiontests/admin_widgets/__init__.py b/tests/regressiontests/admin_widgets/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/tests/regressiontests/admin_widgets/models.py b/tests/regressiontests/admin_widgets/models.py
new file mode 100644
index 0000000000..7207e8edd4
--- /dev/null
+++ b/tests/regressiontests/admin_widgets/models.py
@@ -0,0 +1,73 @@
+
+from django.conf import settings
+from django.db import models
+
+class Member(models.Model):
+ name = models.CharField(max_length=100)
+
+ def __unicode__(self):
+ return self.name
+
+class Band(models.Model):
+ name = models.CharField(max_length=100)
+ members = models.ManyToManyField(Member)
+
+ def __unicode__(self):
+ return self.name
+
+class Album(models.Model):
+ band = models.ForeignKey(Band)
+ name = models.CharField(max_length=100)
+
+ def __unicode__(self):
+ return self.name
+
+__test__ = {'WIDGETS_TESTS': """
+>>> from datetime import datetime
+>>> from django.utils.html import escape, conditional_escape
+>>> from django.contrib.admin.widgets import FilteredSelectMultiple, AdminSplitDateTime
+>>> from django.contrib.admin.widgets import AdminFileWidget, ForeignKeyRawIdWidget, ManyToManyRawIdWidget
+>>> from django.contrib.admin.widgets import RelatedFieldWidgetWrapper
+
+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
+for each test.
+
+Make sure that the Admin widgets render properly, that is, without their extra
+HTML escaped.
+
+>>> w = FilteredSelectMultiple('test', False)
+>>> print conditional_escape(w.render('test', 'test'))
+
+
+
+>>> w = AdminSplitDateTime()
+>>> print conditional_escape(w.render('test', datetime(2007, 12, 1, 9, 30)))
+