#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.

Reply via email to