django: DetailView: self.object 从方法 post 调用时会引发错误,但从方法 get_context_data 调用时它确实有效
Posted
技术标签:
【中文标题】django: DetailView: self.object 从方法 post 调用时会引发错误,但从方法 get_context_data 调用时它确实有效【英文标题】:django: DetailView: self.object raises an error when called from the method post, but it does work when called from the method get_context_data 【发布时间】:2013-10-12 09:52:36 【问题描述】:我创建了一个继承自DetailView
的类,并覆盖了get_context_data
和post
方法。标题中提到的看起来很奇怪的是,我可以从get_context_data
调用self.object
,但我不能从帖子中调用,所以我不得不改用self.get_object()
。但我想明白为什么? self.object
被 get_context_data
删除了吗?这样在它之后调用的任何方法都不能使用它或类似的东西?
提前致谢
【问题讨论】:
【参考方案1】:post
方法在DetailView
中默认不存在,您实际上创建它并没有覆盖,因此您需要自己获取对象,它在get_context_data
中可用的原因是它已经在get
方法中获取并保存在object
属性中。
【讨论】:
但是如果已经创建了对象,为什么它不能用于我的新方法帖子?我的意思是 get_context_data 显然首先被调用,然后 self.object 被创建并保存,所以从逻辑上讲,它应该可用于在 get_context_data 之后调用的任何方法到我的类的实例中,除非方法 post 被调用到另一个实例中,或者self.object 之前被清除了..我说的有道理吗? @smarber No no.. 如果你查看 DetailView 源代码,get_context_data
实际上是在对象创建后在get
方法内部调用的(也在get
内部)。所以你需要做同样的事情,当你决定创建自己的方法(post、put、delete等)时,你需要自己抓取对象。你看过 ccbv.co.uk 参考资料吗?以上是关于django: DetailView: self.object 从方法 post 调用时会引发错误,但从方法 get_context_data 调用时它确实有效的主要内容,如果未能解决你的问题,请参考以下文章