Opened 3 months ago
Last modified 7 weeks ago
#35953 assigned New feature
Add composite PK admin support — at Initial Version
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).
According to the ticket's flags, the next step(s) to move this issue forward are:
- To improve the patch as described in the pull request review comments or on this ticket, then uncheck "Patch needs improvement".
If creating a new pull request, include a link to the pull request in the ticket comment when making that update. The usual format is:
[https://github.com/django/django/pull/#### PR]
.