地址对象确实已缓存。如果您打印
user.__dict__
访问前后
user.address
. 例如:
>>> user.__dict__
{'date_joined': datetime.datetime(2010, 4, 1, 12, 31, 59),
'email': u'user@test.com',
'first_name': u'myfirstname',
'id': 1L,
'is_active': 1,
'is_staff': 1,
'is_superuser': 1,
'last_login': datetime.datetime(2010, 4, 1, 12, 31, 59),
'last_name': u'mylastname',
'password': u'sha1$...$...',
'username': u'myusername'}
>>> country = user.address.country
>>> user.__dict__
{'_address': <myapp.models.address object at 0xwherever,
'email': u'user@test.com',
...etc}
因此用户对象获得
_address
对象,用于后续查找相关对象。
你可以使用
select_related()
当您第一次让用户在访问地址之前预先填充这个缓存时,因此您只访问数据库一次。