繁体   English   中英

我可以为 model formset 使用标准通用 CreateView 吗?

[英]Can I use standard generic CreateView for model formset?

我再次被 model formset 卡住了。 我有以下表格:

ArticleFormSet = modelformset_factory(Article, fields=('title', 'pub_date'), extra=3)

并查看此 model 表单集:

class ArticleCreateView(CreateView):
   model = Article
   form_class = ArticleFormSet
   template_name = 'article_form_view.html'
   success_url = "/"

在此处阅读文档: https://docs.djangoproject.com/en/4.0/topics/forms/modelforms/#model-formsets我了解,我可以使用 ArticleFormSet 而不是标准表单作为 form_class 属性。

所以基本上,我所期待的是,这应该为同一篇文章 model 显示 3 forms,我应该能够同时创建三篇文章。

但我收到“TypeError: init () got an unexpected keyword argument 'instance'”。

所以问题是,这是它应该如何工作的吗? 或者同时创建几篇文章的正确方法是什么?

我不认为通用的CreateView默认能够处理表单集。 但是,自定义视图应该更容易,因此它可以按您的意愿工作。

从我看到的情况来看,当视图尝试创建要呈现的表单时会引发异常。 因此需要覆盖get_form方法:

class ArticleCreateView(CreateView):

...

   def get_form(self):
        if self.request.method == 'POST':
            return self.form_class(self.request.POST)

        return self.form_class()

该方法要么返回工厂创建的模型表单集(在调用表单集的情况下),要么用您发布的数据填充它。

另一个问题似乎是success_url。 使用表单集时会出现异常。 因此,您还需要覆盖该方法,例如

...
    def get_success_url(self):
        return self.success_url 

现在它应该可以工作了。

但是:如果我理解正确,您希望该视图用于创建新数据。 ``modelformset_factory``` 获取所有 model 实例并附加 3 个空 forms。 这可能不是你想要的。 为了获得一个空的表单集,请查看此 SO 帖子:

Django 的 FormWizard 中的空 ModelFormset

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM