djangodocs.org

766 sections in Django dev Search all versions →

Conditional update

Reference Conditional Expressions Advanced queries

Let’s say we want to change the account_type for our clients to match their registration dates. We can do this using a conditional expression and the update() method:

Func() expressions

Reference Query Expressions Built-in Expressions

… directly: or they can be used to build a library of database functions: But both cases will result in a queryset where each model is annotated with an extra attribute field_lower produced, roughly, from the following SQL: See Database Functions …

Aggregate() expressions

Reference Query Expressions Built-in Expressions

This is useful for specifying a value to be returned other than None when the queryset (or grouping) contains no entries. The **extra kwargs are key=value pairs that can be interpolated into the template attribute.

Reference Query Expressions Built-in ExpressionsSubquery() expressions

To prevent a subquery from returning multiple rows, a slice ([:1]) of the queryset is used: In this case, the subquery must only return a single column and a single row: the email address of the most recently created comment.

Reference Query Expressions Built-in ExpressionsSubquery() expressions

… returns a boolean value and Exists() may be used as a condition in When expressions, or to directly filter a queryset: This will ensure that the subquery will not be added to the SELECT columns, which may result in a …

Reference Query Expressions Built-in ExpressionsSubquery() expressions

values('post') aggregates comments by Post. Finally, annotate(...) performs the aggregation. The order in which these queryset methods are applied is important. In this case, since the subquery must be limited to a single column, values('total') is required.

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.

pre_delete

Reference Signals Model signals

django.db.models.signals.pre_delete Sent at the beginning of a model’s delete() method and a queryset’s delete() method. Arguments sent with this signal: sender The model class. instance The actual instance being deleted. using The database alias being used.

post_delete

Reference Signals Model signals

django.db.models.signals.post_delete Like pre_delete, but sent at the end of a model’s delete() method and a queryset’s delete() method. Arguments sent with this signal: sender : The model class. instance : The actual instance being deleted.

Queries & the ORM

Topic guide Asynchronous support Async views

With some exceptions, Django can run ORM queries asynchronously: Detailed notes can be found in Asynchronous queries, but in short: All QuerySet methods that cause an SQL query to occur have an a-prefixed asynchronous variant.

Custom managers

Topic guide Managers

There are two reasons you might want to customize a Manager: to add extra Manager methods, and/or to modify the initial QuerySet the Manager returns.

Profile first

Topic guide Database access optimization

Use QuerySet.explain() to understand how specific QuerySets are executed by your database. You may also want to use an external project like django-debug-toolbar, or a tool that monitors your database directly.

Create in bulk

Topic guide Database access optimization Use bulk methods

When creating objects, where possible, use the bulk_create() method to reduce the number of SQL queries. For example: …is preferable to: Note that bulk_create() has several caveats, so ensure it’s appropriate for your use case.

Update in bulk

Topic guide Database access optimization Use bulk methods

Given a list or queryset of objects: The following example: …is preferable to: Note that bulk_update() has several caveats, so ensure it’s appropriate for your use case.

Retrieving all objects

Topic guide Making queries Retrieving objects

The simplest way to retrieve objects from a table is to get all of them. To do this, use the all() method on a Manager: The all() method returns a QuerySet of all the objects in the database.