Django Tutorial · QuerySets

QuerySet Filter

Learn all about QuerySet Filter in this comprehensive tutorial.

5 min read intermediate
  • The filter() method is used to filter your search, and allows you to return only the rows that matches the search term.
  • The filter() method takes the arguments as **kwargs (keyword arguments), so you can filter on more than one field by separating them by a comma.
  • To return records where firstname is Emil or firstname is Tobias (meaning: returning records that matches either query, not necessarily both) is not as easy as the AND example above.
  • Django has its own way of specifying SQL statements and WHERE clauses.
  • All Field lookup keywords must be specified with the fieldname, followed by two(!

QuerySet Filter

The filter() method is used to filter your search, and allows you to return only the rows that matches the search term.

As we learned in the previous chapter, we can filter on field names like this:

In SQL, the above statement would be written like this:

AND

The filter() method takes the arguments as **kwargs (keyword arguments), so you can filter on more than one field by separating them by a comma.

In SQL, the above statement would be written like this:

OR

To return records where firstname is Emil or firstname is Tobias (meaning: returning records that matches either query, not necessarily both) is not as easy as the AND example above.

We can use multiple filter() methods, separated by a pipe | character. The results will merge into one model.

Another common method is to import and use Q expressions:

In SQL, the above statement would be written like this:

Field Lookups

Django has its own way of specifying SQL statements and WHERE clauses.

To make specific where clauses in Django, use "Field lookups".

Field lookups are keywords that represents specific SQL keywords.

The above statement will return records where firstname starts with 'L'.

Field Lookups Syntax

All Field lookup keywords must be specified with the fieldname, followed by two(!) underscore characters, and the keyword.

In our Member model, the statement would be written like this:

Example Return the records where firstname starts with the letter 'L': mydata = Member.objects.filter(firstname__startswith='L').values() Run Example »

Field Lookups Reference A list of all field look up keywords:

Keyword Description

contains Contains the phrase

icontains Same as contains, but case-insensitive

date Matches a date

day Matches a date (day of month, 1-31) (for dates)

endswith Ends with

iendswith Same as endswidth, but case-insensitive

exact An exact match

iexact Same as exact, but case-insensitive

in Matches one of the values

isnull Matches NULL values

gt Greater than

gte Greater than, or equal to

hour Matches an hour (for datetimes)

lt Less than

lte Less than, or equal to

minute Matches a minute (for datetimes)

month Matches a month (for dates)

quarter Matches a quarter of the year (1-4) (for dates)

range Match between

regex Matches a regular expression

iregex Same as regex, but case-insensitive

second Matches a second (for datetimes)

startswith Starts with

istartswith Same as startswith, but case-insensitive

time Matches a time (for datetimes)

week Matches a week number (1-53) (for dates)

week_day Matches a day of week (1-7) 1 is sunday

iso_week_day Matches a ISO 8601 day of week (1-7) 1 is monday

year Matches a year (for dates)

iso_year Matches an ISO 8601 year (for dates)

❮ Previous Next ❯

★ +1

Sign in to track progress

Module quiz

2 questions
1

Which of the following is true about QuerySet Filter?

2

What is the most common pitfall when working with QuerySet Filter?

Answer all questions to submit.