Opened 4 years ago
Last modified 4 years ago
#31701 closed Cleanup/optimization
Extend DeferredAttribute & Remove unnecessary FileField.contrib_to_class () — at Version 3
Reported by: | Sultan | Owned by: | nobody |
---|---|---|---|
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: | yes | UI/UX: | no |
Description (last modified by )
The model fields use, by default, the descriptor DeferredAttribute to access and process (if necessary) the data associated with them. This type of data represents the actual data in db column. I prefer to call it a “field data”.
To access the field data in instance dict, Field.attname is used as a key.
In addition to the field data, some other model fields (for example, ForeignKey) also use a "client data" of the attribute, the processing of which is performed by a particular descriptor. Such a descriptor is usually assigned to a model using Field.name. Its task is to present the same field data in a different format, the result of which differs from the result of Field.attname descriptor: article.author
returns a User object, and article.auther_id
returns a User object pk.
This feature is not used in FileField. Then why use FileField.name instead of FileField.attname for FileDescriptor?
I think it would be better if FileDescriptor uses FileField.attname and continue working with the DeferredAttribute class.
Change History (3)
comment:1 by , 4 years ago
Description: | modified (diff) |
---|
comment:2 by , 4 years ago
Description: | modified (diff) |
---|---|
Version: | 3.1 → master |
comment:3 by , 4 years ago
Description: | modified (diff) |
---|---|
Summary: | Extend DeferredAttribute & Remove unnecessary overriding of contrib_to_class () in FileField → Extend DeferredAttribute & Remove unnecessary FileField.contrib_to_class () |