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