Opened 3 weeks ago

Last modified 3 weeks ago

#35953 assigned New feature

Add composite PK admin support — at Initial Version

Reported by: Csirmaz Bendegúz Owned by:
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

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 not-encoded PKs too.
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 (0)

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