Django如何将查询结果外键模型添加到queryset

Django how to add query results foreign key model to queryset

如何通过B模型的外键将Author模型对象放入查询集中?我想在我的模板中使用 Author 对象。

#Models.py
    
class Book(models.Model):
        name = models.CharField(max_length=5)

class Author(models.Model):
    # lots of fields

class B(models.Model):
    author = models.ForeignKey(Author)
    book = models.ForeignKey(Book)

selected_book = "ABC"
book = Book.objects.get(name=selected_book)
original_queryset = B.objects.filter(name=book)

for i in original_queryset:
    print(i.author) # returns what i want
    queryset = # get all i.author objects somehow

return render(request,"template.html", {"queryset": queryset}

删除 for 循环。然后在 original_queryset = B.objects.filter(name=book) 行后添加以下行->

queryset = original_queryset.author

如果这不起作用,请告诉我。希望能帮到你

您可以将 B 模型的 author 字段重命名为 authors,这会使您的代码更有意义,因为 ForeignKey 字段可以存储很多数据。在您的代码中,您已将 B 模型的 author 字段设为 ForeignKey 字段,这意味着 books 可以有多个 作者。可以看ForeignKey reference的django文档。 如果您按照我告诉您的方式进行更改,那么不要忘记 运行 migration(python manage.py makemigrations and python manage.py migrate 命令在您的 cmd 中) 并更改行queryset = original_queryset.authorqueryset = original_queryset.authors

另一种方法

您可以在模板的 context 中传递 original_queryset,(即:{'queryset':original_queryset }),然后在您的 template.html 中,您可以像这样添加标签:

{% for book in queryset %}
<ul>
{% for author in book.author %}
<li>author.name</li>
....
{% endfor %}
</ul>
{% endfor %} 

通过执行这些操作,您可以将书籍和作者很好地放置在模板中。如果还是报错,给我留言,希望能帮到你。