You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django内置基于类的视图:self.object的来源是哪里?

Django SingleObjectMixin中self.object的创建位置

SingleObjectMixin里的self.object是由**get_object()方法**负责获取并赋值的,你贴的代码片段里省略了这部分核心实现。

具体逻辑:

  • get_object()先通过get_queryset()拿到查询集:优先用你定义的self.queryset,如果没设置,就基于self.model生成默认查询集self.model.objects.all()。
  • 接着从URL路由参数中提取pk或slug(对应Mixin的pk_url_kwarg、slug_url_kwarg属性,默认值是pk和slug);如果开启了query_pk_and_slug=True,会同时用两个参数过滤查询集。
  • 最后从查询集中取出唯一匹配的对象,这个对象会被返回,在视图的执行流程中,调用get_object()的地方会把返回值赋值给self.object。

触发时机:

当使用继承了SingleObjectMixin的视图(比如DetailView、UpdateView)时,视图的get()(或post(),比如更新类视图)方法会主动调用get_object(),完成self.object的赋值,之后调用get_context_data()时,这个属性就已经存在了。

举个简化的调用流程示例:

class DetailView(SingleObjectMixin, TemplateResponseMixin, BaseDetailView):
    def get(self, request, *args, **kwargs):
        self.object = self.get_object()  # 在这里完成self.object的赋值
        context = self.get_context_data(object=self.object)
        return self.render_to_response(context)

内容的提问来源于stack exchange,提问作者행신경자

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 08:59:15