#12096: Model fields are not accessible as attributes of the model class
-------------------------------------+-------------------------------------
Reporter: sejo | Owner: (none)
Type: New feature | Status: new
Component: Database layer | Version: 1.1
(models, ORM) |
Severity: Normal | Resolution:
Keywords: model, docstrings, | Triage Stage: Accepted
attributes |
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Comment (by Simon Charette):
Since `DeferredAttribute`
[https://github.com/django/django/commit/7f51876f99851fdc3fef63aecdfbcffa199c26b9
#diff-35c61cb049d39b2e890f12f8c1f9583fb8ca351a8495718b5375a7120f775d05R700
are systematically added as model class attributes] (#26207) this would be
a simple matter of adjusting a few `__get__(instance=None)` case to return
`self.field` (`DeferredAttribute` and the three classes of
`related_descriptors`).
The only remaining concern here is backward compatibility.
[https://github.com/django/django/blob/e30d6678421b7573a1995f61521f14348c9b2a17/django/db/models/fields/related_descriptors.py#L900-L905
The only documented pattern of accessing a field attribute] from the class
is for `ManyToMany.through` via `ManyToManyDescriptor.through` but there
might be valid use cases in the wild for expecting descriptors to be
returned that this change could break. As long as we document this change
and that it's still possible to retrieve descriptors by doing
`ModelClass.__dict__.get('descriptor')` I think we should be fine though.
Beyond the documentation benefits this could pave the way for interesting
features that the verbosity of `Model._meta.get_field` such as SQLAlchemy-
esque lookups (e.g.
`Book.objects.filter(Book.title.contains(Book.author.name))` ) but most
importantly it would restore the most intuitive pattern for field
retrieval.
--
Ticket URL: <https://code.djangoproject.com/ticket/12096#comment:11>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/010701829a70e8d2-29309a3b-5610-4f10-8beb-6f375488c84d-000000%40eu-central-1.amazonses.com.