【问题标题】:Rolling your own generic views in Django在 Django 中滚动你自己的通用视图
【发布时间】:2011-09-25 16:10:46
【问题描述】:

Django 文档在基于类的通用视图中提到了 DetailView 由以下各项组成:View、SingleObjectMixin 和 SingleObjectTemplateResponseMixin。我正在对此进行试验,因为我有兴趣创建一个通用视图,该视图将使用 ModelForm 执行 object_detail 视图,以便可以自动生成我的模型行。

为了尝试复制 DetailView,我尝试创建一个类,如下所示:

from django.views.generic import list_detail, View
from django.views.generic.detail import (SingleObjectMixin,
    SingleObjectTemplateResponseMixin, BaseDetailView)

class formdisplay(View,SingleObjectMixin,SingleObjectTemplateResponseMixin): pass

当我使用 formdisplay 而不是 list_detail.object_detail 时出现错误

TypeError at /inpatient-detail/4/
__init__() takes exactly 1 non-keyword argument (2 given)

关于如何做到这一点的任何提示?

另外,关于如何编写导入语句的文档在哪里?我不得不在谷歌上找到要导入的内容,因为我在文档中找不到。

提前致谢, 史蒂夫

【问题讨论】:

  • 你是如何在你的 url conf 中使用 formdisplay 的? formdisplay.as_view()?另外,您可能想要执行 Django 已经内置的操作。检查django.views.generic.edit 和他们的FormView 类。
  • 谢谢。我正在寻找一种单行方式来利用我的 ModelForm。 object_detail 函数很好,但不会将表单作为输入。我现在看到,我可以通过为 ModelView 重写 object_detail 或使用基于类的通用视图并替换 get 方法来做我想做的事情。

标签: django django-generic-views


【解决方案1】:

由于 django 关于基于类的通用视图的文档仍然不是最先进的,因此获得更多信息的最佳方法是浏览源代码;对于创建/更新视图this 是一个好的开始。

当从多个类/mixins 继承时,您还应该注意它们的顺序 - 如果您查看 django 的源代码,您会发现它们将 Mixins放在其他类之前!

我并不完全清楚你想要实现什么,但如果你的目标是显示一个包含现有对象数据的表单,django.views.generic.update.UpdateView 应该是你的朋友!

【讨论】:

  • 感谢您指出来源。我现在看到 list_detail.object_detail 实际上是一个函数,关于类视图的 cmets 确实在说要转移到可以与 mixins 一起使用的基于类的通用视图。
  • 答案在stackoverflow.com/q/6564068/820321 上,谢谢大家。相关问题的 cmets 让我弄清楚了这一点。没有你就不可能做到这一点!
猜你喜欢
  • 2012-01-03
  • 2021-08-31
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 2012-10-26
  • 1970-01-01
  • 2011-02-05
相关资源
最近更新 更多