djangodocs.org

705 sections in Django 5.1 Search all versions →

Topic guide Making queries Retrieving objects

The QuerySet returned by all() describes all objects in the database table. Usually, though, you’ll need to select only a subset of the complete set of objects. To create such a subset, you refine the initial QuerySet, adding filter conditions.

Chaining filters

Topic guide Making queries Retrieving objectsRetrieving specific objects with filters

The result of refining a QuerySet is itself a QuerySet, so it’s possible to chain refinements together. For example: This takes the initial QuerySet of all entries in the database, adds a filter, then an exclusion, then another filter.

condition

Reference PostgreSQL specific database constraints ExclusionConstraint

ExclusionConstraint.condition A Q object that specifies the condition to restrict a constraint to a subset of rows. For example, condition=Q(cancelled=False). These conditions have the same database restrictions as django.db.models.Index.condition.

condition

Reference Constraints reference UniqueConstraint

CheckConstraint.condition A Q object or boolean Expression that specifies the conditional check you want the constraint to enforce. For example, CheckConstraint(condition=Q(age__gte=18), name='age_gte_18') ensures the age field is never less than 18.

condition

Reference Constraints reference UniqueConstraint

UniqueConstraint.condition A Q object that specifies the condition you want the constraint to enforce. For example: ensures that each user only has one draft. These conditions have the same database restrictions as Index.condition.

contains

Topic guide Making queries Querying JSONFieldContainment and key lookups

The contains lookup is overridden on JSONField. The returned objects are those where the given dict of key-value pairs are all contained in the top-level of the field. For example: NOTE: contains is not supported on Oracle and SQLite.

Ideas for more tests

Tutorial Writing your first Django app, part 5 Test a view

We ought to add a similar get_queryset method to ResultsView and create a new test class for that view. It’ll be very similar to what we have just created; in fact there will be a lot of repetition.

MultipleObjectsReturned

Reference Model class reference Attributes

exceptionModel.MultipleObjectsReturned : This exception is raised by QuerySet.get() when multiple objects are found for the given lookups.

Using F() in filters

Reference Query Expressions Built-in ExpressionsF() expressions

F() is also very useful in QuerySet filters, where they make it possible to filter a set of objects against criteria based on their field values, rather than on Python values. This is documented in using F() expressions in queries.

Filtering on annotations

Topic guide Aggregation Aggregations and other QuerySet clausesfilter() and exclude()

It’s more efficient to use QuerySet.filter() to exclude > rows. The aggregation filter argument is only useful when using two or > more aggregations over the same relations with different conditionals.

Topic guide Aggregation Aggregations and other QuerySet clausesfilter() and exclude()

When developing a complex query that involves both annotate() and filter() clauses, pay particular attention to the order in which the clauses are applied to the QuerySet.

order_by()

Topic guide Aggregation Aggregations and other QuerySet clauses

For example, to order a QuerySet of books by the number of authors that have contributed to the book, you could use the following query:

values()

Topic guide Aggregation Aggregations and other QuerySet clauses

Ordinarily, annotations are generated on a per-object basis - an annotated QuerySet will return one result for each object in the original QuerySet.

Topic guide Aggregation Aggregations and other QuerySet clausesvalues()

Fields that are mentioned in the order_by() part of a queryset are used when selecting the output data, even if they are not otherwise specified in the values() call.

Use iterator()

Topic guide Database access optimization Understand QuerySets

When you have a lot of objects, the caching behavior of the QuerySet can cause a large amount of memory to be used. In this case, iterator() may help.

Topic guide Making queries Retrieving objects

filter() will always give you a QuerySet, even if only a single object matches the query - in this case, it will be a QuerySet containing a single element.

Topic guide Making queries Retrieving objectsLookups that span relationships

NOTE: The behavior of filter() for queries > that span multi-value relationships, as described above, is not implemented > equivalently for exclude(). Instead, > the conditions in a single exclude() > call will not necessarily refer to the same item.

Topic guide Making queries Related objectsOne-to-many relationships

In addition to the QuerySet methods defined in “Retrieving objects” above, the ForeignKey Manager has additional methods used to handle the set of related objects.