我一直在编写内部网站,同时一整天都在沉迷于Django,但现在我注意到模型中的ForeignKeys非常低效。
我的模型有6个ForeignKeys,它们基本上是查找表。当我查询所有对象并在模板中显示它们时,每个项目运行大约10个查询。以下是一些代码,可以更好地解释:
class Website(models.Model):
domain_name = models.CharField(max_length=100)
registrant = models.ForeignKey('Registrant')
account = models.ForeignKey('Account')
registrar = models.ForeignKey('Registrar')
server = models.ForeignKey('Server', related_name='server')
host = models.ForeignKey('Host')
target_server = models.ForeignKey('Server', related_name='target')
class Registrant(models.Model):
name = models.CharField(max_length=100)
...和另外5个简单的表格。总共有155个网站记录,我正在使用以下视图:
Website.objects.all()
最终执行了1544个查询。在模板中,我使用了所有的外键字段,如下所示:
<span class="value">Registrant:</span> <a href="/filter/registrant/{{ website.registrant.id }}">{{ website.registrant.name }}</a><br />
我知道它会运行很多查询...但似乎这太过于过度了。这正常吗?我不应该这样做吗?
我对Django还比较新,希望我只是在做一些愚蠢的事情。这绝对是一个非常棒的框架。