Задвоенный SQL запрос Django
До редактирования вопрсо стоял так - "Подскажите, как правильно организовать данный код, что бы не было повторяющегося запроса." В комментарии ниже был дан ответ. Вроде мне стало ясно, что первый запрос SELECT ••• FROM "auth_user" WHERE "auth_user"."id" = '1' LIMIT 21
отвечает за залогиненного юзера (если я разлогинюсь, то он пропадает), а второй такой же, появляется когда я пытаюсь вытащить автора поста в шаблоне, средством post.user
. В связи с этим, появилась еще пара вопросов.
Почему когда я вызываю в шаблоне
post.title
, джаго не генерит каждый раз запрос в бд в отличии отpost.user
? (потому что второй берется из связанной модели?)Если я создам подобным образом к примеру 100 постов (даже с одним и тем же автором), то при каждом обращении к
post.user
у меня в дебаг тулбаре будет 100 одинаковых запросов типаSELECT ••• FROM "auth_user" WHERE "auth_user"."id" = '1' LIMIT 21
. Норма ли это?
models.py
User = get_user_model()
class Post(models.Model):
title = models.CharField(max_length=50)
user = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
views.py
def index(request):
template_name = 'blog/index.html'
posts = Post.objects.all()
context = {'posts': posts}
return render(request, template_name, context)
html
{% for post in posts %}
{{ post.title }}
{{ post.user }}
{% endfor %}