#30577 closed New feature (needsinfo)
feature request: custom rendering for readonly fields in admin
Reported by: | David | Owned by: | nobody |
---|---|---|---|
Component: | contrib.admin | Version: | 2.2 |
Severity: | Normal | Keywords: | |
Cc: | Florian Demmer, Carlos Palol | Triage Stage: | Unreviewed |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
The new view permission is extremely useful, and encourages more use of the Django Admin tool. It has highlighted a limitation in the rendering of readonly_fields
that can be easily addressed. At the moment, readonly_fields
(or all fields when the user has only can_view
) can only have custom rendering or formatting if they are custom properties or new fields (created in the ModelAdmin), existing fields can't be changed. In my use-case I have a number of rich text enhanced TextField
s, which when rendered as read-only show up as HTML and can't be marked safe. In this case creating a custom field in the ModelAdmin
where the Field can be output with mark_safe()
doesn't work as the original field needs to exist for users with change permissions, the only other way is to include the field twice which creates UX issues.
If, in ModelAdmin, you could override the formatting/output of a read-only field it would address this issue. Alternatively, as mentioned in the comments of #14802, the idea of Fields having a method that is called by admin to handle the read-only HTML rendering would also do the trick as is related.
Change History (5)
comment:2 by , 5 years ago
Resolution: | → needsinfo |
---|---|
Status: | new → closed |
comment:3 by , 3 years ago
Cc: | added |
---|
comment:4 by , 3 years ago
Just ended up here while looking for a way to have a custom widget on a read-only JSONField and bumping into ReadOnlyPasswordHashWidget
hackery on my own...
Wouldn't it be cleaner (and easy) to simple update ​https://github.com/django/django/blob/main/django/contrib/admin/templates/admin/includes/fieldset.html#L16-L18 to check for an existing field.readonly_widget
all the time?
As I'm not sure how to use the readonlyhashwidget step (field needs to *not* be readonly and widget then is readonly...?), I've gone the route of simply using custom methods to render the "field" but it's not as reusable as being able to set globally used readonly-widgets per form.Field class...
comment:5 by , 2 years ago
Cc: | added |
---|
Hi David.
This is interesting. I think I see where you're coming from but, could I ask you to put together an minimal project that demonstrates exactly the issue you're seeing — perhaps with some screenshots etc — so we can make sure we're 100% clear?
I'm not sure about an adjustment here. I think it would depend on exactly what's being proposed. Do you have a specific implementation idea?
It may be that there's a work-around.
bf39978a53f117ca02e9a0c78b76664a41a54745 introduced a check on the widget for a
read_only
attribute, when renderingAdminReadonlyField
If you were to override,
ModelAdmin.get_form()
to set a custom widget (withread_only=True
) on the required field, when the user did not have thechange
permission, you should 🤔 be able to leverage this to get the behaviour you need. (If you could put together that test project it would be easy enough to have a play with this...)Given these questions, and that #14802 was closed as
wontfix
, I'm going to close this asneedsinfo
right now. A sample project plus a proposal is probably needed to progress. With just a sample project, asking on the DevelopersMailingList might provide some help. Exploring the work-around would be the shortest route forward.