【发布时间】:2011-04-06 02:23:14
【问题描述】:
我想知道是否有一种在 Django 中创建“重复”模型表单的简单方法 - 即预先填充现有模型实例内容的表单(某些字段除外,例如那些唯一的字段),但保存时会创建一个新实例。
我正在考虑向 ModelForm 提供一个实例,以便像使用“编辑”表单一样预填充数据,然后在保存之前将实例设置为 None,但这给出了一个“'NoneType' 对象没有在表单上调用 .save() 时出现属性 'pk'" 错误。似乎在构建表单时提供实例的行为会在最后产生一些依赖。
我很难找到解决这个问题的方法,但我无法想象“重复”表单太独特了,所以也许我遗漏了一些简单的东西?
任何帮助将不胜感激。
【问题讨论】:
-
你找到可行的解决方案了吗,OP?
-
这是一段时间(以及 Django 的几个版本)之前的事情,最终并没有成为我们实现的功能。所以不,我从来没有解决过解决方案。虽然@Pydev's answer当时显然对我不起作用,但在较新版本的 Django 中可能是一个不同的故事。但是,它也存在复制太多的风险,因为您是从一个完全填充的模型实例开始的。再说一次,也许这就是你想要的行为。
-
如果我今天再试一次,我可能会尝试类似@Manoj's answer 的方法。表单知道它包含的字段,因此从给定实例中获取这些字段并使用它们填充
initial的通用解决方案应该不会太难。也许作为工厂类方法,例如MyForm.as_duplicate(data, instance)? -
感谢您的跟进!我最终做了一些与你在这里描述的非常相似的事情。模型上处理重复的类方法和我的 WidgetUpdateView 的子类版本,它使用重复方法在
form_valid中交换新实例。
标签: django duplicates modelform