2

我想知道是否有一种在 Django 中创建“重复”ModelForm 的简单方法 - 即预先填充现有模型实例内容的表单(某些字段除外,例如那些唯一的字段),但会创建一个保存时的新实例。

我正在考虑向 ModelForm 提供实例,以便像使用“编辑”表单一样预填充数据,然后在保存之前将实例设置为 None,但这给出了一个“'NoneType' 对象没有属性 'pk '" 在表单上调用 .save() 时出错。似乎在构造表单时提供实例的行为会在最后产生一些依赖。

我很难找到解决这个问题的方法,但我无法想象“重复”表单太独特了,所以也许我遗漏了一些简单的东西?

任何帮助,将不胜感激。

4

2 回答 2

1

我认为您需要的是一种为表单中的字段填写初始值的方法。完成此任务的最佳方法是从现有实例创建一个初始值字典(以字段名称为键)并将其提供给表单。

像这样的东西:

class AddressForm(forms.ModelForm):
    class Meta:
        model = Address

# Inside view:
address = Address.object.get(**conditions)
initial = dict()
for field in ('state', 'zipcode'): # Assuming these are the fields you want to pre-fill
    initial[field] = getattr(address, field)

form = AddressForm(initial = initial)
于 2010-08-31T05:48:57.710 回答
1
class AddressForm(forms.ModelForm):
    class Meta:
        model = Address

# Inside view:
address = Address.object.get(pk=<your-id>)
address.pk = None # that's the trick, after form save new object will be created
form = AddressForm(instance=address)
于 2010-08-31T07:32:08.040 回答