#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 , 9 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 , 9 years ago
| Summary: | Add 'obj' kwarg to InlineModelAdmin's.has_add_permission() → Add 'obj' kwarg to InlineModelAdmin.has_add_permission() |
|---|
comment:3 by , 9 years ago
| Has patch: | set |
|---|---|
| Owner: | changed from to |
| Status: | new → assigned |
comment:4 by , 9 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 , 9 years ago
| Patch needs improvement: | unset |
|---|
comment:6 by , 9 years ago
| Patch needs improvement: | set |
|---|
comment:7 by , 9 years ago
Is there anything I can improve else? Why is it in 'Patch needs improvement'?
comment:8 by , 8 years ago
| Cc: | added |
|---|
comment:10 by , 8 years ago
| Patch needs improvement: | set |
|---|
comment:12 by , 8 years ago
| Triage Stage: | Accepted → Ready for checkin |
|---|
Seems okay at first glance. For backwards compatibility, each
has_add_permission()call that starts passingobjneeds to check if thehas_add_permission()method accepts anobjparameter and give a deprecation warning if not; see a7c256cb5491bf2a77abdff01638239db5bfd9d5 for a similar deprecation.