首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django“复制”ModelForm

Django“复制”ModelForm
EN

Stack Overflow用户
提问于 2010-08-31 13:45:30
回答 2查看 2.5K关注 0票数 2

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

我一直在考虑为对象提供一个实例,以便像“编辑”表单一样预先填充数据,然后在保存之前将实例设置为“无”,但在表单上调用.save()时,这会给出一个"'NoneType‘ModelForm has no attribute 'pk'“错误。似乎在构造表单时提供一个实例的行为创建了一些依赖于它在最后的存在。

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

任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

发布于 2010-08-31 13:48:58

我认为您需要的是一种在表单中填写字段初始值的方法。实现这一点的最好方法是从现有实例创建初始值的字典(以字段名为关键字),并将其提供给表单。

如下所示:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2010-08-31 15:32:08

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3606311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档