#27991 closed Cleanup/optimization (fixed)
Add 'obj' kwarg to InlineModelAdmin.has_add_permission()
Reported by: | Olivier Dalang | Owned by: | Vladimir Ivanov |
---|---|---|---|
Component: | contrib.admin | Version: | 1.10 |
Severity: | Normal | Keywords: | |
Cc: | Manel Clos | Triage Stage: | Ready for checkin |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
Hi !
InlineModelAdmin
has the following methods :
def has_add_permission(self, request): ... def has_change_permission(self, request, obj=None): ... def has_delete_permission(self, request, obj=None): ...
In those methods, the obj
parameter represents the parent instance. So, by overriding ModelInline.has_change_permission
you can have some specific logic to define whether an user can change inlines objects depending on the parent object.
The thing is that the has_add_permission
misses this argument. It probably came from a confusion between the parent instance (the obj
argument) and the child instance (not accessible).
Still, exactly as it makes sense overriding ModelInline.has_change_permission
, we may need to have some specific logic to define whether an user can add inlines objects depending on the parent object.
I suggest we add the obj
argument to ModelInline.has_add_permission
, and make it more clear (both in the doc and as comments in the code) that obj
refers to the parent instance, and not the inline instance.
It would be awesome if those methods also took the inline instance as a parameter (eg. def has_change_permission(self, request, obj=None, childObj=None):
to keep it backwards compatible ) but that would probably be for another ticket.
Thanks !
Olivier
Change History (18)
comment:1 by , 8 years ago
Component: | Uncategorized → contrib.admin |
---|---|
Summary: | InlineModelAdmin's has_add_permission method doesn't accept instance argument → Add 'obj' kwarg to InlineModelAdmin's.has_add_permission() |
Triage Stage: | Unreviewed → Accepted |
Type: | Uncategorized → Cleanup/optimization |
comment:2 by , 8 years ago
Summary: | Add 'obj' kwarg to InlineModelAdmin's.has_add_permission() → Add 'obj' kwarg to InlineModelAdmin.has_add_permission() |
---|
comment:3 by , 8 years ago
Has patch: | set |
---|---|
Owner: | changed from | to
Status: | new → assigned |
comment:4 by , 8 years ago
Patch needs improvement: | set |
---|
When updating, please also check your patch using the PatchReviewChecklist, then uncheck "Patch needs improvement" on this ticket.
comment:5 by , 8 years ago
Patch needs improvement: | unset |
---|
comment:6 by , 8 years ago
Patch needs improvement: | set |
---|
comment:7 by , 8 years ago
Is there anything I can improve else? Why is it in 'Patch needs improvement'?
comment:8 by , 7 years ago
Cc: | added |
---|
comment:10 by , 7 years ago
Patch needs improvement: | set |
---|
comment:12 by , 7 years ago
Triage Stage: | Accepted → Ready for checkin |
---|
Seems okay at first glance. For backwards compatibility, each
has_add_permission()
call that starts passingobj
needs to check if thehas_add_permission()
method accepts anobj
parameter and give a deprecation warning if not; see a7c256cb5491bf2a77abdff01638239db5bfd9d5 for a similar deprecation.