用于通用模型的Django Createview

时间:2014-07-29 10:50:18

标签: python django generics modelform

我一直在努力寻找这个,但我无法在任何地方找到它。所以,在这里:

我试图构建一个通用类,它将通用模型作为参数并为其创建表单。为此,我使用了Django的ModelForm和CreateView类。这个的主要目标是,当我需要创建一个新表单时,我只是声明一个传递Model名称的新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的AttributeError 此方法仅适用于视图类。

提前谢谢!

3 个答案:

答案 0 :(得分:5)

您不应该创建视图类的实例,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。)

答案 1 :(得分:2)

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

答案 2 :(得分:0)

我也有这个错误(TypeError: 'instance' is an invalid keyword argument for this function);对我而言,它与定义模型而不是form_class中的表格有关。