#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 django-updates+unsubscr...@googlegroups.com. 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.