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

Django使用Generic DeleteView时表单返回DeferredAttribute对象如何解决

问题根源

你在DeleteNoteView的get_context_data方法中,为表单传入的instance参数是self.model,也就是Note模型类本身,而非当前请求要删除的具体Note实例。直接访问模型类的字段属性就会返回你看到的DeferredAttribute对象,而不是实例存储的实际数据。

你写的函数视图中,DeleteNoteForm(instance=note)传入的是通过pk查询到的具体Note实例,所以可以正常渲染数据,类视图写法就是这里传错了参数。

修复方案

修改views.py中DeleteNoteView的get_context_data方法,将instance参数替换为类视图已经自动查询好的当前实例self.object即可,修改后代码如下:

class DeleteNoteView(DeleteView):
    model = Note
    template_name = 'note-delete.html'
    form_class = DeleteNoteForm
    success_url = reverse_lazy('home page')

    def get_context_data(self, **kwargs):
        data = super().get_context_data(**kwargs)
        # 替换 self.model 为 self.object,self.object是当前要删除的具体Note实例
        data['form'] = self.form_class(instance=self.object)
        return data
补充说明

Django的SingleObjectMixin(DeleteView的父类之一)会自动根据url传入的pk参数查询对应实例,在执行get_context_data之前就已经将实例赋值给了self.object属性,可以直接使用。


内容的提问来源于stack exchange,提问作者peperone

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 20:54:02