Opened 10 months ago

Last modified 10 months ago

#35224 closed Cleanup/optimization

Make GenericForeignKey a subclass of Field — at Version 2

Reported by: Adam Johnson Owned by: nobody
Component: contrib.contenttypes Version: dev
Severity: Normal Keywords:
Cc: Triage Stage: Ready for checkin
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description (last modified by Adam Johnson)

When introduced in bca5327b21eb2e3ee18292cbe532d6d0071201d8, GenericForeignKey was created as its own class. Since then, it has grown to resemble a field, particularly in fb48eb05816b1ac87d58696cdfe48be18c901f16.

GenericForeignKey *not* being a Field leads to several issues:

  1. It is added as a “field” and returned by Model._meta.get_fields(), a type confusion reflected in django-stubs.
  2. It duplicates code, such as _check_field_name().
  3. It misses methods like __repr__().

I think we should make it a subclass of Field.

(GenericRelation has always been a subclass of Field.)

Change History (2)

comment:1 by Adam Johnson, 10 months ago

Description: modified (diff)

comment:2 by Adam Johnson, 10 months ago

Description: modified (diff)
Summary: Make GenericForeignKey subclass FieldMake GenericForeignKey a subclass of Field
Note: See TracTickets for help on using tickets.
Back to Top