djangodocs.org

255 sections across all versions Narrow to Django 6.0 (current) →

select_related()

Reference QuerySet API reference QuerySet APIMethods that return new QuerySets

select_related(*fields) Returns a QuerySet that will “follow” foreign-key relationships, selecting additional related-object data when it executes its query.

prefetch_related()

Reference QuerySet API reference QuerySet APIMethods that return new QuerySets

This has a similar purpose to select_related, in that both are designed to stop the deluge of database queries that is caused by accessing related objects, but the strategy is quite different.

select_for_update()

Reference QuerySet API reference QuerySet APIMethods that return new QuerySets

For example, rows of related objects specified in select_related() are locked in addition to rows of the queryset’s model. If this isn’t desired, specify the related objects you want to lock in select_for_update(of=(...)) using the same fields syntax as select_related().

Related objects

Topic guide Making queries

These accessors may be prefetched by the QuerySet methods select_related() or prefetch_related(). If not prefetched, access will trigger an on-demand fetch through the model’s fetch mode.

dev

ModelAdmin options

Reference The Django admin site ModelAdmin objects

By default, this is set to 100. ModelAdmin.list_select_related : Set list_select_related to tell Django to use select_related() in retrieving the list of objects on the admin change list page. This can save you a bunch of database queries.

Prefetch() objects

Reference QuerySet API reference Query-related tools

… a base QuerySet for the given lookup. This is useful to further filter down the prefetch operation, or to call select_related() from the prefetched relation, hence reducing the number of queries even further: The to_attr argument sets the result of …

Topic guide Database access optimization Retrieve related objects efficiently

Enable it for all usage of your models with a custom manager. Using this fetch mode is easier than declaring fields to fetch with select_related() or prefetch_related(), especially when it’s hard to predict which fields will be accessed.

dev

Forward

Topic guide Making queries Related objectsOne-to-many relationships

Subsequent accesses to the foreign key on the same object instance are cached. Example: Note that the select_related() QuerySet method recursively prepopulates the cache of all one-to-many relationships ahead of time. Example:

SQL efficiency

Design philosophies Database API

This is also why the select_related() QuerySet method exists. It’s an optional performance booster for the common case of selecting “every related object.”

4.2 5.0 5.1 5.2 6.0

ModelAdmin methods

Reference The Django admin site ModelAdmin objects

ModelAdmin.get_list_select_related(request)[source] : The get_list_select_related method is given the HttpRequest and should return a boolean or list as ModelAdmin.list_select_related does.

S

Index

… django.middleware.security) - seekable() (HttpResponse method) - Select (class in django.forms) - select_for_update() (in module django.db.models.query.QuerySet) - select_on_save (Options attribute) - select_related() (in module django.db.models.query.QuerySet) - select_template() (Engine method) - (in module django.template.loader) - SelectDateWidget (class in django.forms) - SelectMultiple (class …

2028

Internals Django Deprecation Timeline

Calling QuerySet.select_related() without arguments will raise TypeError. QuerySet.select_related() will raise TypeError if passed True rather than AttributeError. ModelAdmin will raise ValueError if subclassed with its list_select_related attribute set to True. ModelAdmin will raise ValueError if its get_list_select_related() method returns True.

dev

1.7

Internals Django Deprecation Timeline

The daily_cleanup.py script will be removed. The depth keyword argument will be removed from select_related(). The undocumented get_warnings_state()/restore_warnings_state() functions from django.test.utils and the save_warnings_state()/ restore_warnings_state() django.test.*TestCase methods are deprecated. Use the warnings.catch_warnings context manager available starting with Python 2.6 instead.

dev

ModelAdmin

Reference System check framework contrib app checksadmin

admin.E117: The value of list_select_related must be a boolean, tuple or list. admin.E118: The value of list_per_page must be an integer. admin.E119: The value of list_max_show_all must be an integer.

Reference Model instance reference

If you delete a field from a model instance, accessing it again reloads the value from the database: Model.refresh_from_db(using=None,fields=None,from_queryset=None)[source] Model.arefresh_from_db(using=None,fields=None,from_queryset=None) Asynchronous version: arefresh_from_db() If you need to reload a model’s values from the database, you can use the refresh_from_db() method.

6.0 dev

defer()

Reference QuerySet API reference QuerySet APIMethods that return new QuerySets

… will still be deferred). You can defer loading of fields in related models (if the related models are loading via select_related()) by using the standard double-underscore notation to separate related fields: If you want to clear the set of deferred …

only()

Reference QuerySet API reference QuerySet APIMethods that return new QuerySets

Using only() and omitting a field requested using select_related() is an error as well. On the other hand, invoking only() without any arguments, will return every field (including annotations) fetched by the queryset.

1.7

Internals Django Deprecation Timeline

The daily_cleanup.py script will be removed. The depth keyword argument will be removed from select_related(). The undocumented get_warnings_state()/restore_warnings_state() functions from django.test.utils and the save_warnings_state()/ restore_warnings_state() django.test.*TestCase methods are deprecated. Use the warnings.catch_warnings context manager available starting with Python 2.6 instead.

6.0 dev