Django ORM Self contained defer and only Although the method is not filter, exclude,
order_by These methods are so common , But it can be used to optimize the database query . Today, I'll show you how to use these two methods .

Defer method

Defer The purpose of the method is to skip the specified field when querying the database , For example, the following query will skip each article Entry Of headline and body field . When you don't need to use it in query results headline and body Field , use defer Method can prevent the headline and body Load memory , This saves space . An article may not matter , But there are a lot of articles , Save memory space can not be ignored .
Entry.objects.defer("headline", "body")
Defer Methods can be compared with filter, exclude Methods in combination , The order doesn't matter , As shown below :
Entry.objects.defer("body").filter(rating=5).defer("headline")
If you want to load all the fields , Just set up defer(None)
my_queryset.defer(None)
Only method

Only Methods and methods defer Method action class time , It's just only Method is to specify the fields to load . For example, the following query will only load body and pub_date.
Entry.objects.only("body", "pub_date")
use only We must pay great attention to the order of methods , Its implementation is subject to the last one . The following example will only load headline.
Entry.objects.only("body", "rating").only("headline")
only Methods and methods defer Methods can be combined , But we must pay attention to the sequence . The following example will only load headline.
Entry.objects.only("headline", "body").defer("body")

Technology