Данные в шаблонах
Мне нужна ваша поддержка. У меня есть 2 модели Author и Post, я хочу отобразить данные для конкретного автора в шаблоне. Я хочу отобразить посты конкретного автора, и информацию (имя_и фамилия) этого автора. В моем файле представления я создал метод с 2 наборами запросов. Один из этих наборов запросов ищет в таблице Post посты определенного автора, а другой набор запросов ищет в таблице Author информацию об авторе-владельце постов.
Мой вопрос, могу ли я сделать это с помощью только одного QuerySet? Если да, то как я могу отобразить это в шаблоне?
МОДЕЛИ
class Autor(models.Model):
first_name = models.CharField(max_length=30, null=False, verbose_name='First Name')
last_name = models.CharField(max_length=30, null=False, verbose_name='Last Name')
class Post(models.Model):
autor = models.ForeignKey(Autor, on_delete=models.CASCADE)
post = models.CharField(max_length=200, null=False, verbose_name='Post')
VIEW.PY
def index(request):
autor = Autor.objects.filter(first_name='Peter').first()
autor_posts = Post.objects.filter(autor__first_name='Peter')
return render(request, 'posts.html', {'autor_posts': autor_posts, 'autor': autor})
POSTS.HTML
Author: {{ autor.first_name }}, {{ autor.last_name }}
Posts:
{% for post in autor_posts %}
<p>{{ post.id }}, {{ post.post }}</p>
<p></p>
{% endfor %}
Вы можете сделать это с помощью:
def index(request):
autor = Autor.objects.prefetch_related('post_set').filter(first_name='Peter').first()
return render(request, 'posts.html', {'autor': autor})
В этом случае все равно будет выполняться два запроса: один для получения autor
и один для предварительной выборки всех связанных post
постов autor
. Но преимущество в том, что вам не нужно вручную писать отдельный фильтр для получения постов autor
.
Итак, в своем шаблоне вы можете сделать следующее:
Author: {{ autor.first_name }}, {{ autor.last_name }}
Posts:
{% for post in autor.post_set.all %}
<p>{{ post.id }}, {{ post.post }}</p>
<p></p>
{% endfor %}