Django“复制”ModelForm

时间:2010-08-31 05:45:30

标签: django duplicates modelform

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

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

我找不到解决这个问题的方法,但我无法想象一个“重复”的形式太独特了,所以也许我错过了一些简单的东西?

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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)