我的视图中有此方法,然后是我的html:
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=1
。我不知道如何运行每个pk,以便呈现每个评论,而不仅仅是那些带有pk=1
的评论
模型
class Author(models.Model):
name = models.CharField(max_length=255)
created_at = models.DateTimeField(auto_now_add = True)
updated_at = models.DateTimeField(auto_now = True)
class Book(models.Model):
title = models.CharField(max_length=255)
contributor = models.ForeignKey(User, related_name = "book_added",
on_delete = models.CASCADE)
author = models.ForeignKey(Author, related_name = "book_written",
on_delete = models.CASCADE)
created_at = models.DateTimeField(auto_now_add = True)
updated_at = models.DateTimeField(auto_now = True)
class Review(models.Model):
content = models.CharField(max_length=255)
rating = models.IntegerField()
poster = models.ForeignKey(User, related_name="user_reviews",
on_delete=models.CASCADE)
book = models.ForeignKey(Book, related_name="book_reviews",
on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now_add = True)
updated_at = models.DateTimeField(auto_now = True)
评论与书籍相关,因此不需要单独在上下文中添加评论。在模板的迭代过程中,评审将来自该书。理想情况下,您还应该在视图中使用^{} 或^{} ,以提高数据库查询的效率
根据您的模型设置,您将执行以下操作:
如果您的模型链接到具有相关名称的此类评论,那么这将起作用
然后您的模板将执行以下操作
这里有一篇关于这方面的文章https://medium.com/codeptivesolutions/prefetch-related-and-select-related-in-django-90f07a2379c0
来自评论的代码
所以我认为你想用这个例子做的是
它应该打印
Review
查询集book.book_reviews
应该是RelatedManager
,因此您应该能够使用all()
、filter()
等查询该值相关问题 更多 >
编程相关推荐