Ensure that NullBooleanField displays the appropriate icon for null values in admin changelists. Refs #13071.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@12746 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
baa4d3b710
commit
a0c77ada99
|
@ -337,12 +337,14 @@ def display_for_field(value, field):
|
|||
|
||||
if field.flatchoices:
|
||||
return dict(field.flatchoices).get(value, EMPTY_CHANGELIST_VALUE)
|
||||
# NullBooleanField needs special-case null-handling, so it comes
|
||||
# before the general null test.
|
||||
elif isinstance(field, models.BooleanField) or isinstance(field, models.NullBooleanField):
|
||||
return _boolean_icon(value)
|
||||
elif value is None:
|
||||
return EMPTY_CHANGELIST_VALUE
|
||||
elif isinstance(field, models.DateField) or isinstance(field, models.TimeField):
|
||||
return formats.localize(value)
|
||||
elif isinstance(field, models.BooleanField) or isinstance(field, models.NullBooleanField):
|
||||
return _boolean_icon(value)
|
||||
elif isinstance(field, models.DecimalField):
|
||||
return formats.number_format(value, field.decimal_places)
|
||||
elif isinstance(field, models.FloatField):
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
from datetime import datetime
|
||||
import unittest
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import models
|
||||
from django.utils.formats import localize
|
||||
from django.test import TestCase
|
||||
|
@ -131,8 +132,11 @@ class UtilTests(unittest.TestCase):
|
|||
display_value = display_for_field(None, models.TimeField())
|
||||
self.assertEqual(display_value, EMPTY_CHANGELIST_VALUE)
|
||||
|
||||
# Regression test for #13071: NullBooleanField has special
|
||||
# handling.
|
||||
display_value = display_for_field(None, models.NullBooleanField())
|
||||
self.assertEqual(display_value, EMPTY_CHANGELIST_VALUE)
|
||||
expected = u'<img src="%simg/admin/icon-unknown.gif" alt="None" />' % settings.ADMIN_MEDIA_PREFIX
|
||||
self.assertEqual(display_value, expected)
|
||||
|
||||
display_value = display_for_field(None, models.DecimalField())
|
||||
self.assertEqual(display_value, EMPTY_CHANGELIST_VALUE)
|
||||
|
|
|
@ -464,11 +464,13 @@ class Post(models.Model):
|
|||
title = models.CharField(max_length=100)
|
||||
content = models.TextField()
|
||||
posted = models.DateField(default=datetime.date.today)
|
||||
public = models.NullBooleanField()
|
||||
|
||||
def awesomeness_level(self):
|
||||
return "Very awesome."
|
||||
|
||||
class PostAdmin(admin.ModelAdmin):
|
||||
list_display = ['title', 'public']
|
||||
readonly_fields = ('posted', 'awesomeness_level', 'coolness', lambda obj: "foo")
|
||||
|
||||
inlines = [
|
||||
|
|
|
@ -253,6 +253,15 @@ class AdminViewBasicTest(TestCase):
|
|||
"Changelist filter isn't showing options contained inside a model field 'choices' option named group."
|
||||
)
|
||||
|
||||
def testChangeListNullBooleanDisplay(self):
|
||||
Post.objects.create(public=None)
|
||||
# This hard-codes the URl because it'll fail if it runs
|
||||
# against the 'admin2' custom admin (which doesn't have the
|
||||
# Post model).
|
||||
response = self.client.get("/test_admin/admin/admin_views/post/")
|
||||
self.failUnless('icon-unknown.gif' in response.content)
|
||||
print "Passed"
|
||||
|
||||
class SaveAsTests(TestCase):
|
||||
fixtures = ['admin-views-users.xml','admin-views-person.xml']
|
||||
|
||||
|
|
Loading…
Reference in New Issue