Opened 2 years ago
Closed 2 years ago
#34055 closed New feature (wontfix)
InlineModelAdmin and permissions on the instances shown in the in-line
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.