Django通用模型的CreateView
我一直在努力寻找这个问题的答案,但无论如何都找不到。所以,我来问问:
我想创建一个通用的类,这个类可以接收一个通用的模型作为参数,并为它生成一个表单。为此,我使用了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处出现AttributeError 这个方法仅在视图类中可用。
谢谢大家的帮助!
3 个回答
0
我也遇到过这个错误(TypeError: 'instance' is an invalid keyword argument for this function
);对我来说,这个问题是因为在form_class
中定义了模型,而不是表单。
2
meshy已经给出了答案,但要注意的是,你的 to_modelform
函数其实是多余的。CreateView可以直接使用模型或者模型实例,而不需要用到表单,具体可以查看文档。
6
你不需要自己去创建视图类的实例,as_view
这个方法会帮你完成这个工作。
通常你应该这样调用:ViewClass.as_view()
,而不是这样:ViewClass().as_view()
。
另外,CreateView
已经把model
作为一个参数,所以你应该把你的网址定义成:
url(r'^create', CreateView.as_view(model=Author), name='create'),
想要更好地理解这个是怎么工作的,可以看看这个链接:as_view
方法在CreateView中的用法。(顺便说一下,这个网站是我做的。)