Skip to content

Commit 90d1127

Browse files
committed
Fixed #13038 -- Ensured that readonly fields in the admin have their name added as a CSS class. Thanks to andybak for the report, and javimansilla, fisadev and fgallina for their work on the patch.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@12922 bcc190cf-cafb-0310-a4f2-bffc1f526a37
1 parent 653b27d commit 90d1127

File tree

3 files changed

+18
-8
lines changed

3 files changed

+18
-8
lines changed

django/contrib/admin/helpers.py

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,15 @@ def label_tag(self):
128128

129129
class AdminReadonlyField(object):
130130
def __init__(self, form, field, is_first, model_admin=None):
131-
self.field = field
131+
label = label_for_field(field, form._meta.model, model_admin)
132+
# Make self.field look a little bit like a field. This means that
133+
# {{ field.name }} must be a useful class name to identify the field.
134+
# For convenience, store other field-related data here too.
135+
self.field = {
136+
'name': force_unicode(label != '--' and label or ''),
137+
'label': label,
138+
'field': field,
139+
}
132140
self.form = form
133141
self.model_admin = model_admin
134142
self.is_first = is_first
@@ -139,10 +147,8 @@ def label_tag(self):
139147
attrs = {}
140148
if not self.is_first:
141149
attrs["class"] = "inline"
142-
name = forms.forms.pretty_name(
143-
label_for_field(self.field, self.form._meta.model, self.model_admin)
144-
)
145-
contents = force_unicode(escape(name)) + u":"
150+
label = forms.forms.pretty_name(self.field['label'])
151+
contents = force_unicode(escape(label)) + u":"
146152
return mark_safe('<label%(attrs)s>%(contents)s</label>' % {
147153
"attrs": flatatt(attrs),
148154
"contents": contents,
@@ -151,7 +157,7 @@ def label_tag(self):
151157
def contents(self):
152158
from django.contrib.admin.templatetags.admin_list import _boolean_icon
153159
from django.contrib.admin.views.main import EMPTY_CHANGELIST_VALUE
154-
field, obj, model_admin = self.field, self.form.instance, self.model_admin
160+
field, obj, model_admin = self.field['field'], self.form.instance, self.model_admin
155161
try:
156162
f, attr, value = lookup_field(field, obj, model_admin)
157163
except (AttributeError, ValueError, ObjectDoesNotExist):
@@ -323,4 +329,3 @@ def normalize_dictionary(data_dict):
323329
del data_dict[key]
324330
data_dict[str(key)] = value
325331
return data_dict
326-

django/contrib/admin/templates/admin/includes/fieldset.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<div class="description">{{ fieldset.description|safe }}</div>
55
{% endif %}
66
{% for line in fieldset %}
7-
<div class="form-row{% if line.errors %} errors{% endif %} {% for field in line %}{{ field.field.name }} {% endfor %} ">
7+
<div class="form-row{% if line.errors %} errors{% endif %}{% for field in line %} {{ field.field.name }}{% endfor %}">
88
{{ line.errors }}
99
{% for field in line %}
1010
<div{% if not line.fields|length_is:"1" %} class="field-box"{% endif %}>

tests/regressiontests/admin_views/tests.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1967,6 +1967,11 @@ def test_readonly_get(self):
19671967
formats.localize(datetime.date.today() - datetime.timedelta(days=7))
19681968
)
19691969

1970+
self.assertContains(response, '<div class="form-row coolness">')
1971+
self.assertContains(response, '<div class="form-row awesomeness_level">')
1972+
self.assertContains(response, '<div class="form-row posted">')
1973+
self.assertContains(response, '<div class="form-row ">')
1974+
19701975
p = Post.objects.create(title="I worked on readonly_fields", content="Its good stuff")
19711976
response = self.client.get('/test_admin/admin/admin_views/post/%d/' % p.pk)
19721977
self.assertContains(response, "%d amount of cool" % p.pk)

0 commit comments

Comments
 (0)