Opened 3 weeks ago

Last modified 3 weeks ago

#35953 assigned New feature

Add composite PK admin support — at Version 2

Reported by: Csirmaz Bendegúz Owned by: Csirmaz Bendegúz
Component: contrib.admin Version: dev
Severity: Normal Keywords:
Cc: Csirmaz Bendegúz Triage Stage: Accepted
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: yes
Easy pickings: no UI/UX: no

Description (last modified by Csirmaz Bendegúz)

This is a follow up to #373 (CompositePrimaryKey).

My proposal is to separate the primary key fields with a comma e.g. /admin/posts/post/foo,bar/change.

The comma is not escaped when used as a separator, but it is escaped (%2C) when part of the primary key's value.
e.g. pk = ("The,quick", "brown") -> /admin/posts/post/The%2Cquick,brown/change

According to RFC 3986, unesacped commas are allowed in URI paths (as far as I understand).

What if an existing, non-composite primary key contains a comma?
While Django URL encodes commas in the admin URLs (see QUOTE_MAP), it must be able to look up objects by non-encoded PKs too (see #12349, #18550).
The solution is simple. We must check if the model the user is trying access has a composite primary key or not.

Since admin's LogEntry model uses "generic foreign keys", this ticket depends on #35941 (composite GenericForeignKeys).

Change History (2)

comment:1 by Sarah Boyce, 3 weeks ago

Has patch: set
Owner: set to Csirmaz Bendegúz
Patch needs improvement: set
Status: newassigned
Triage Stage: UnreviewedAccepted

PR: https://github.com/django/django/pull/18865

Marking as "Needs improvement" due to the dependency on #35941

comment:2 by Csirmaz Bendegúz, 3 weeks ago

Description: modified (diff)

Yes that's correct, thanks Sarah

Note: See TracTickets for help on using tickets.
Back to Top