它在此处指定。
Django 为你缓存它。问题是您将如何处理这些“外键”引用。例如,如果您有一个模型的外键,其unicode方法访问另一个外键以打印“友好”的 unicode 字符串,这取决于您如何制作查询集,您可能会再次访问数据库。
让我举个例子来澄清一下:
class Player(models.Model):
pname = models.CharField(max_length=20)
team = models.ForeignKey('Team')
class Team(models.Model):
tname = models.CharField(max_length=20)
country = models.ForeignKey('Country')
def __unicode__(self):
return self.tname + u' is from ' + self.country.cname
class Country(models.Model):
cname = models.CharField(max_length=10)
当你这样做时:
player = Player.objects.get(name=u'Messi')
print player.team
您将访问数据库 3 次,一次获取球员,一次获取球队,另一次获取国家/地区名称。如果我没记错的话,下次你做那个“打印”语句时,django 不会再次访问数据库(我可能错了,但我认为它是这样工作的)。
现在想象一下,您想为每个玩家都这样做,并且您有很多玩家。每个玩家要访问数据库 3 次,这可不是什么好事。如果您稍微更改您的查询,您可以对数据库执行相同的操作一次。您可以这样做:
players = Player.objects.all().select_related('team__country')
for player in players:
print player.team
我希望这可以帮助您了解查询集如何在 Django 上工作。尝试阅读我在此处链接的文档。一个可以帮助您衡量查询效率的优秀工具是django_toolbar。我强烈推荐它。