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
[[Image(https://i.imgur.com/Aatfblj.png)]]
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
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/34055>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
* status: new => closed
* resolution: => wontfix
Comment:
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.
--
Ticket URL: <https://code.djangoproject.com/ticket/34055#comment:1>