【问题标题】:Django Createview for generic Model通用模型的 Django Createview
【发布时间】:2014-09-20 17:18:28
【问题描述】:

我一直在努力寻找这个,我在任何地方都找不到。所以,就这样吧:

我正在尝试构建一个将泛型模型作为参数并为其创建表单的泛型类。为此,我使用 Django 的 ModelForm 和 CreateView 类。这样做的主要目标是,当我需要创建一个新表单时,我只需声明一个传递模型名称的新 URL。

urls.py

​​>
url(r'^create', GenericCreate(model=Author).as_view(), name='create'),

views.py

​​>
class GenericCreate(CreateView):

    def __init__(self, model, *args, **kwargs):
        super(GenericCreate, self).__init__(*args, **kwargs)
        self.form_class = to_modelform(self.model)

to_modelform 是我实现的一个函数,可以将模型转换为模型表单,并且它可以工作。

这给了我以下错误:

/create 处的属性错误 此方法仅适用于视图类。

提前谢谢你!

【问题讨论】:

    标签: python django generics modelform


    【解决方案1】:

    我也遇到了这个错误 (TypeError: 'instance' is an invalid keyword argument for this function);对我来说,这与在 form_class 中定义模型而不是表单有关。

    【讨论】:

      【解决方案2】:

      您不应该创建视图类的实例,as_view 会为您创建。

      您通常会调用ViewClass.as_view(),而不是ViewClass().as_view()

      另外,CreateView 已经将model 作为参数,因此您应该将您的网址定义为:

      url(r'^create', CreateView.as_view(model=Author), name='create'),

      要正确了解其工作原理,请查看as_view method on CreateView(完全披露——我构建了ccbv.co.uk。)

      【讨论】:

      • 谢谢!!它现在可以工作了.. 我按照您的建议做了,还必须从 init 函数参数中删除“模型”。
      • 很高兴:) 成功了如果您对答案感到满意,请喂饱我的stackoverflow 积分瘾,并使其成为公认的答案! :P
      【解决方案3】:

      meshy 提供了答案,但请注意,您的 to_modelform 函数是不必要的。 CreateView 非常适合模型或模型实例而不是表单,请参阅the documentation

      【讨论】:

      • 谢谢...我会更详细地阅读它。我是 python 和 Django 的新手。我删除了我的to_modelform 函数,出现了错误TypeError at /create 'instance' is an invalid keyword argument for this function
      猜你喜欢
      • 2013-04-06
      • 1970-01-01
      • 1970-01-01
      • 2014-08-20
      • 2015-05-15
      • 2015-06-25
      • 2016-01-24
      • 1970-01-01
      • 2015-04-07
      相关资源
      最近更新 更多