我想知道是否有一种在Django中创建“重复”ModelForm的简单方法 - 即预先填充现有模型实例内容的表单(除了某些字段,例如那些唯一的字段),但在保存时会创建一个新实例。
我正在考虑向ModelForm提供一个实例,以便数据预填充为“编辑”形式,然后在保存之前将实例设置为None,但这会给出一个“'NoneType'对象没有在表单上调用.save()时出现属性'pk'“错误。在构造表单时,似乎提供实例的行为会在最后产生一些依赖性。
我找不到解决这个问题的方法,但我无法想象一个“重复”的形式太独特了,所以也许我错过了一些简单的东西?
任何帮助都将不胜感激。
答案 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)