get_query_set() 和 get_context_data() 的用途和好处是啥?我们可以在一个视图中同时使用它们吗?
Posted
技术标签:
【中文标题】get_query_set() 和 get_context_data() 的用途和好处是啥?我们可以在一个视图中同时使用它们吗?【英文标题】:What are the uses and benefits of get_query_set() and get_context_data()? Can we use both of them together inside a view?get_query_set() 和 get_context_data() 的用途和好处是什么?我们可以在一个视图中同时使用它们吗? 【发布时间】:2019-11-05 08:36:47 【问题描述】:我在浏览 Django 文档时遇到了两种显示对象数据的方法。我想知道我们是否可以在单个视图中同时使用get_query_set()
和get_context_data
。例如,如果我有 3 个名为 Publisher, Books, Author
的模型,其中 Books
和 Author
通过 ManyToMany
字段相互关联,Books
和 Publisher
通过 ForeignKey
关联。
有风景
template_name='some_name.html'
有两种通过获取对象来显示数据的方法。
self.Publisher=get_object_or_404(Publisher,name=self.kwargs('name_of_publisher')
return Books.objects.filter(publisher=self.publisher)
我认为它将返回与name_of_publisher
相关的所有 Book 对象。我想问一下数据将如何显示?模板中会有循环吗? Url 会是什么样子,如果没有定义context
,那么它将如何显示数据?
我遇到的第二种方法是
def get_context_data(self,**kwargs):
context=super().get_context_data(**kwargs)
context['publisher']=self.publisher
return context
我发现这个的工作非常混乱。我无法理解这是如何在这里工作的。我也在这里阅读了另一篇文章,以防万一您尝试给我一个链接。提前感谢您。但我所知道的是,这两者都可以在单个template
和ListView
中使用吗?如果是,请描述template
文件的外观。
【问题讨论】:
【参考方案1】:get_context_data()
为上下文字典准备数据。如果您需要添加自定义数据,请覆盖您已经完成的方式。
get_queryset()
准备要在模板中显示的数据。 get_queryset()
的返回值将用于上下文字典中的“object_list”键。您可以覆盖 get_queryset() 方法以根据所需条件过滤数据。因此,要访问模板文件中的数据,请在模板文件中包含以下内容:
% for item in object_list %
<li> item.field1 - item.field2 - item.field2 </li>
% endfor %
【讨论】:
以上是关于get_query_set() 和 get_context_data() 的用途和好处是啥?我们可以在一个视图中同时使用它们吗?的主要内容,如果未能解决你的问题,请参考以下文章