如何解决如何在 Django 上下文视图中使用主键在 python for 循环中渲染 html
我的视图中有这个方法,然后是我的 html:
console.log(myFunction('abc'));
def index(request):
context = {
"user": User.objects.get(id = request.session['user_id']),"book": Book.objects.all(),"review": Book.objects.get(pk=1).book_reviews.all()
}
return render(request,"books_home.html",context)
我在“评论”时遇到问题: {% for Book in book %}
{{Book.contributor.id}}<br>
Book Title: <a href="{{Book.id}}">{{Book.title}}</a><br>
Author: {{Book.author.name}}<br>
Contributor: <a href="{{Book.contributor.id}}">{{Book.contributor.first_name}} {{Book.contributor.last_name}}</a><br>
{% for book_reviews in review %}
<a href="{{User.id}}">{{book_reviews.poster.first_name}} {{book_reviews.poster.last_name}}</a> says: {{book_reviews.content}}<br>
Rating: {{book_reviews.rating}}<br>
Posted on: {{book_reviews.created_at}}<br>
{% endfor %}
{% if Book.contributor.id == request.session.user_id %} <a href="reads/{{Book.id}}/delete">Delete All</a>{% endif %}
<hr>
,Book.objects.get(pk=1).book_reviews.all()
是问题所在。我不知道如何遍历每个 pk 以便呈现每个评论,而不仅仅是那些带有 pk=1
的评论。
模型
pk=1
解决方法
评论与书籍相关,因此您无需单独添加评论上下文。评论将在模板迭代期间来自本书。理想情况下,您还应该在视图中使用 select_related
或 prefetch_related
以提高数据库查询的效率。
根据您的模型设置,您会做类似的事情;
def index(request):
context = {
"user": User.objects.get(id = request.session['user_id']),"books": Book.objects.all().prefetch_related('book_reviews'),}
return render(request,"books_home.html",context)
如果您的模型链接到具有相关名称的评论,这将起作用;
class Book(models.Model):
reviews = models.ManyToManyField(Review,related_name='book_reviews')
然后你的模板会做类似的事情
{% for book in books %}
{{ book.title }}
{% for review in book.reviews.all %}
{{ review }}
{% endfor %}
{% endfor %}
这里有一篇文章; https://medium.com/codeptivesolutions/prefetch-related-and-select-related-in-django-90f07a2379c0
来自评论的代码;
>>> books = Book.objects.all().prefetch_related('book_reviews')
>>> for books in Book.objects.all().prefetch_related('book_reviews'):
>>> print(books.book_reviews)
>>> reads_app.Review.None reads_app.Review.None
所以我认为你想用这个例子做的是;
>>> books = Book.objects.all().prefetch_related('book_reviews')
>>> for book in books:
>>> print(book.book_reviews.all())
那应该打印 Review
查询集。 book.book_reviews
应该是 RelatedManager
,因此您应该能够使用 all()
、filter()
等进行查询
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。