In Django, QuerySets are lazy objects that represent database queries. When you create or modify a QuerySet by filtering or excluding data, Django does not immediately run a database query. Instead, it builds the query internally. The actual database query happens only when you evaluate the QuerySet, such as by iterating over it, converting it to a list, or calling count(). This lazy behavior allows you to chain multiple filters and modifications efficiently before hitting the database once. For example, creating a QuerySet filtered by author and then excluding older books does not query the database until you call count(), which triggers the query and returns the number of matching records. This approach saves resources and makes QuerySets powerful for building complex queries step-by-step.