我一直在努力寻找这个,但我无法在任何地方找到它。所以,在这里:
我试图构建一个通用类,它将通用模型作为参数并为其创建表单。为此,我使用了Django的ModelForm和CreateView类。这个的主要目标是,当我需要创建一个新表单时,我只是声明一个传递Model名称的新URL。
url(r'^create', GenericCreate(model=Author).as_view(), name='create'),
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 此方法仅适用于视图类。
提前谢谢!
答案 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
中的表格有关。