page contents

说说看使用基于类的视图(CBV)时get_queryset, get_context_data和get_object方法的作用?

轩辕小不懂 发布于 2022-06-18 13:53
阅读 635
收藏 0
分类:Python开发
3806
Nen
Nen
- 程序员

get_queryset()方法

正如其名,该方法可以返回一个量身定制的对象列表。当我们使用Django自带的ListView展示所有对象列表时,ListView默认会返回Model.objects.all()。

attachments-2022-06-fNPaWWAU62ad694717567.png

然而这可能不是我们所需要的。当我们希望只展示作者自己发表的文章列表且按文章发布时间逆序排列时,我们就可以通过更具体的get_queryset方法来返回一个我们想要显示的对象列表。

attachments-2022-06-hp3yWCme62ad6962b14b7.png

get_context_data()

get_context_data可以用于给模板传递模型以外的内容或参数,非常有用。例如现在的时间并不属于Article模型。如果你想把现在的时间传递给模板,你还可以通过重写get_context_data方法(如下图所示)。因为调用了父类的方法,

attachments-2022-06-SfpuLEgG62ad6979c6592.png

get_object()方法

DetailView和EditView都是从URL根据pk或其它参数调取一个对象来进行后续操作。下面代码通过DetailView展示一篇文章的详细信息。

attachments-2022-06-KXZatukJ62ad69929c478.png

然而上述代码可能满足不了你的需求。比如你希望一个用户只能查看或编辑自己发表的文章对象。当用户查看别人的对象时,返回http 404错误。这时候你可以通过更具体的get_object()方法来返回一个更具体的对象。代码如下:

attachments-2022-06-snPG8DAv62ad69b73cf04.png

请先 登录 后评论