Steps to reproduce
- Define a Model, whose field(s) specify
my_regular_field = CharField(max_length=255, help_text="this is my regular field")
my_readonly_field = CharField(max_length=255, help_text="this is my readonly field")
- Define a ModelAdmin for your Model, including one of its fields in
fields = 'my_regular_field', 'my_readonly_field'
readonly_fields = 'my_readonly_field',
In the object view/edit screen, "My regular field" will have help text, "My readonly field" will not.
The expected behavior is that readonly fields will work just like "regular" fields, except their widget will be their plain value rather than a form element -- i.e., any string specified as "help_text" should be displayed after the field.
I don't dig very deep into the workings of the admin very often, and so, obviously, what I'm about to say may be entirely unhelpful. However, it appears that
helpers.AdminReadonlyField constructs a limited, faux field object, a dict, at
self.field, rather than assign the appropriate BoundField instance. This is perhaps because readonly fields are not available to it in
self.form.fields. In the template,
field.field.field.help_text fails, as the dict does not contain "help_text", (and I'm not sure where AdminReadonlyField would get it, anyway).