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={})) - Lookup 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('Lookup' % 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))) +

Date:
Time:

+ +>>> w = AdminFileWidget() +>>> print conditional_escape(w.render('test', 'test')) +Currently: test
Change: + +>>> band = Band.objects.create(pk=1, name='Linkin Park') +>>> album = band.album_set.create(name='Hybrid Theory') + +>>> rel = Album._meta.get_field('band').rel +>>> w = ForeignKeyRawIdWidget(rel) +>>> print conditional_escape(w.render('test', band.pk, attrs={})) + Lookup Linkin Park + +>>> m1 = Member.objects.create(pk=1, name='Chester') +>>> m2 = Member.objects.create(pk=2, name='Mike') +>>> band.members.add(m1, m2) + +>>> rel = Band._meta.get_field('members').rel +>>> w = ManyToManyRawIdWidget(rel) +>>> print conditional_escape(w.render('test', [m1.pk, m2.pk], attrs={})) + Lookup + +""" % { + 'ADMIN_MEDIA_PREFIX': settings.ADMIN_MEDIA_PREFIX, + 'MEDIA_URL': settings.MEDIA_URL, +}}