Я весь день пускал слюни из-за 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, так что, надеюсь, я просто делаю что-то глупое. Это определенно довольно удивительный фреймворк.