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).