home / django_tickets / tickets

tickets: 22492

This data as json

id created changetime last_pulled_from_trac stage status component type severity version resolution summary description owner reporter keywords easy has_patch needs_better_patch needs_tests needs_docs ui_ux
22492 2014-04-22 23:48:47 2021-10-26 14:08:41 2022-03-06 04:19:09.069238 Accepted assigned Database layer (models, ORM) New feature Normal dev   provide a way to prevent database queries on model objects This is a feature request to provide a way to prevent database queries from happening in a block of code, especially on model objects (e.g. using a context manager, or an internal flag on model objects). The motivation is for use with the QuerySet method [https://docs.djangoproject.com/en/dev/ref/models/querysets/#only `only()`], for example. (The `only()` method is used to prevent unnecessary fields from being loaded from a database when querying.) Consider the case of using `only()` to retrieve a list of many model objects, and then subsequently displaying them. If one executes some Django code after obtaining this list (e.g. by looping through the list of objects), it would be bad if this later code accidentally accessed some other field on each object. This could trigger the unintentional execution of many individual database queries (e.g. on a production database), with potentially bad consequences. I don't currently know an easy way to prevent this. It would be good to have such a way. For example, Django could provide some sort of `noQuery()` context manager which would raise an exception if the database were queried inside it. Code after the `only()` line could be included in such a context manager. This could prevent accidentally hammering a database. Alternatively, the QuerySet API could expose a way to return objects with some sort of `no_query` flag set. If attribute access on such a model object required a database query, objects with such a flag set could instead raise an exception. This would also suffice to prevent accidental queries. raulcd cjerdonek model,queryset,defer,only 0 0 0 0 0 0
Powered by Datasette · Queries took 1.203ms