Opened 20 months ago
Closed 20 months ago
#35236 closed Cleanup/optimization (fixed)
Access Field.attname and Field.column directly
| Reported by: | Adam Johnson | Owned by: | Adam Johnson |
|---|---|---|---|
| Component: | Database layer (models, ORM) | 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 )
Many field references call Field.get_attname_column() or Field.get_attname(), despite the attname and column attributes containing the computed results (after contribute_to_class()). Updating those call sites to plain attribute access eliminates some function calls, a worthy small speedup.
From a profile of system checks on a smaller project, there were ~2k calls between the versions of each method:
- 630 for
Field.get_attname_column() - 208 for
ForeignKey.get_attname_column() - 666 for
Field.get_attname() - 431 for
ForeignKey.get_attname()
All of these are eliminated by moving to attribute access.
Change History (6)
comment:1 by , 20 months ago
| Description: | modified (diff) |
|---|---|
| Has patch: | set |
| Owner: | changed from to |
comment:2 by , 20 months ago
comment:3 by , 20 months ago
I think it has very little chance to break things. There are hundreds of pre-existing uses of .attname and .column, the PR only updates a handful. Also, non-deterministic attname would be somewhat meaningless, as nothing would reattach the field’s descriptor with a different attribute name.
comment:4 by , 20 months ago
| Triage Stage: | Unreviewed → Accepted |
|---|
I'm always preoccupied with such cleanups as more often than not they cause regressions, but agreed, let's give it a chance.
comment:5 by , 20 months ago
| Triage Stage: | Accepted → Ready for checkin |
|---|
I'm pretty sure this will break some 3rd party packages, e.g.django-joinfield. I don't think it's worth doing.