Opened 2 years ago
Closed 2 years ago
#34055 closed New feature (wontfix)
InlineModelAdmin and permissions on the instances shown in the in-line
Reported by: | Jonas Vacek | Owned by: | nobody |
---|---|---|---|
Component: | contrib.admin | Version: | dev |
Severity: | Normal | Keywords: | Admin, Inline, Permissions |
Cc: | Triage Stage: | Unreviewed | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
As documented above, the has_{xyz}_permission()
functions are referring to the parent obj
.
As far as I can tell, there's no method currently available change the permissions on each instance inside of an inline.
to help visualise what I'm aiming for, here is a screenshot with an implemented work-around that overrrides the default form of the in-line
The work-around is not perfect, as it just changes the <input>
attributes on the form, and changes will not be rejected in any way, but it gives the visual idea. The above is achieved with the following
class MyInlineForm(ModelForm): def __init__(self, *args, **kwargs): super(MyInlineForm, self).__init__(*args, **kwargs) instance = getattr(self, "instance", None) if ( instance and instance.id and (instance.my_permission_function()) ): for field in self.fields: self.fields[field].widget.attrs["readonly"] = True
Implementing the backend for object-level permissions is out-of-scope for Django itself. (See #29918 and linked discussions and PRs)
Third-party packages allow for this: django-guardian, django-rules, and others.