你应该使用
select_related function
,例如
Website.objects.select_related()
这样,在执行查询时,它将自动执行联接并跟踪所有这些外键,而不是在使用它们时按需加载它们。Django延迟地从数据库加载数据,因此默认情况下,您会得到以下行为
# one database query
website = Website.objects.get(id=123)
# first time account is referenced, so another query
print website.account.username
# account has already been loaded, so no new query
print website.account.email_address
# first time registrar is referenced, so another query
print website.registrar.name
等等。如果使用选定的“相关”,则在后台执行联接,并且在第一个查询上自动跟踪并加载所有这些外键,因此只执行一个数据库查询。所以在上面的例子中,你会得到
# one database query with a join and all foreign keys followed
website = Website.objects.select_related().get(id=123)
# no additional query is needed because the data is already loaded
print website.account.username
print website.account.email_address
print website.registrar.name