我想知道是否有一种简单的方法可以在Django中创建一个“重复的”ModelForm -即一个预先填充了现有模型实例内容的表单(除了某些字段,比如那些唯一的字段),但在保存时会创建一个新的实例。
我一直在考虑为对象提供一个实例,以便像“编辑”表单一样预先填充数据,然后在保存之前将实例设置为“无”,但在表单上调用.save()时,这会给出一个"'NoneType‘ModelForm has no attribute 'pk'“错误。似乎在构造表单时提供一个实例的行为创建了一些依赖于它在最后的存在。
我很难找到这个问题的解决方案,但我不能想象一个“重复”的表单太独特了,所以也许我遗漏了一些简单的东西?
任何帮助都将不胜感激。
发布于 2010-08-31 13:48:58
我认为您需要的是一种在表单中填写字段初始值的方法。实现这一点的最好方法是从现有实例创建初始值的字典(以字段名为关键字),并将其提供给表单。
如下所示:
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-31 15:32:08
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)https://stackoverflow.com/questions/3606311
复制相似问题