Я пытаюсь избежать излишних запросов SQL для повышения производительности в Django. Мне нужно пересечь несколько отношений, чтобы добраться до данных, которые мне нужны. Нужно ли мне вручную создавать набор запросов, или Django достаточно умен, чтобы сделать это для меня?
Я бы предпочел сделать это:
if entry.blog.owner.address.zip_code == 10001:
return
Меня беспокоит, что он запуститSQL запрос, чтобы получить данные блога и создать экземпляр объекта блога, выполнить запрос, чтобы получить данные владельца и создать экземпляр объекта владельца, выполнить запрос, чтобы получить данные адреса и создать экземпляр объекта адреса, а затем вернуть мне zip_code. Альтернативой было бы сделать это:
if Entry.objects.filter(entry_id=entry.id, entry__blog__owner__address__zip_code=10001).exists()
return
На мой взгляд, это гораздо менее читабельно, но я уверен, что он выполняет только один запрос. Могу ли я сделать это первым способом или мне нужно сделать это вторым способом, чтобы избежать запуска множества запросов?