Opened 6 weeks ago
Last modified 4 weeks ago
#35941 assigned New feature
Add composite GenericForeignKey support — at Version 2
Reported by: | Csirmaz Bendegúz | Owned by: | |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | dev |
Severity: | Normal | Keywords: | |
Cc: | Csirmaz Bendegúz, Peter Thomassen | Triage Stage: | Accepted |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description (last modified by )
This is a follow up to #373 (CompositePrimaryKey).
Proposal:
My proposal is to implement GenericForeignKey support with JSON.
object_id
is aCharField
(orTextField
)- CompositePrimaryKey is stored as a JSON array in
object_id
- JOINs can be achieved with JSON functions (varies per db backend)
If anyone is interested, I have a proof of concept available on my GitHub (it's an out of sync draft right now, I'll submit a proper PR once composite primary keys are merged).
Risks:
- What if someone is using a JSON array as the primary key (but it's not a composite primary key)?
Before deserializing the JSON array, we need to check if the content type has a composite primary key or not.
- What if the db backend doesn't support JSON functions?
All supported databases support JSON functions.
Notes:
Django admin's LogEntry
has its own implementation of "generic foreign keys".
The approach we take with GenericForeignKey
should also apply to LogEntry
.
If someone has a better proposal or feedback on my proposal I would be happy to hear it.
Thank you Ben for creating this ticket. Accepting as described in ticket:373#comment:204.