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.author
到 queryset = 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 %}
通过执行这些操作,您可以将书籍和作者很好地放置在模板中。如果还是报错,给我留言,希望能帮到你。
如何通过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.author
到 queryset = 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 %}
通过执行这些操作,您可以将书籍和作者很好地放置在模板中。如果还是报错,给我留言,希望能帮到你。