Django通用模型的CreateView

6 投票
3 回答
1037 浏览
提问于 2025-04-18 15:10

我一直在努力寻找这个问题的答案,但无论如何都找不到。所以,我来问问:

我想创建一个通用的类,这个类可以接收一个通用的模型作为参数,并为它生成一个表单。为此,我使用了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中的用法(顺便说一下,这个网站是我做的。)

撰写回答