#31803: Should ModelState.field_cache be documented?
-----------------------------------------+------------------------
Reporter: Jaap Roes | Owner: nobody
Type: Uncategorized | Status: new
Component: Uncategorized | Version: 3.0
Severity: Normal | Keywords:
Triage Stage: Unreviewed | Has patch: 0
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 0
UI/UX: 0 |
-----------------------------------------+------------------------
While writing a model method that relies on data of a related object I
decided that it would be nice if this method could log a warning when it
is called without the related object having been prefetched.
I came across this StackOverflow question
https://stackoverflow.com/questions/36402129/is-there-a-way-to-check-
whether-a-related-object-is-already-fetched and based on that I
implemented something like the following:
{{{
def my_method(self):
if 'related_object' not in self._state.fields_cache:
warnings.warn(
'Calling MyModel.my_method without prefetching the related
object can inefficient '
'Consider adding prefetch_related/select_related to the
originating queryset.',
category=RuntimeWarning,
stacklevel=3
)
...
}}}
This seems to work as intended.
Checking the docs I see that `Model._state` ''is'' documented
(https://docs.djangoproject.com/en/3.0/ref/models/instances/#state), but
the `fields_cache` attribute ''isn't''.
Can I rely on `fields_cache`? Should I consider it to be public but
undocumented, or private with the possibility of disappearing without
notice?
--
Ticket URL: <https://code.djangoproject.com/ticket/31803>
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/048.b69d47152d140a76bd27e19d3bb59cc4%40djangoproject.com.