Django:使用少量字段实例初始化表单

时间:2016-01-27 01:43:54

标签: python django django-forms duplicates fieldset

我有一个django ModelForm来创建/编辑一些对象。

我在UI中有能力添加新的附加字段,例如: http://bootsnipp.com/snippets/featured/dynamic-form-fields-add-amp-remove-bs3

我正在从所有字段(主要和附加)收集数据并以列表的形式保存到数据库中:

例如:

我在name中有一个ModelForm输入字段,在UI中添加了几个额外的name字段。我发送的请求是这样的:

name=test1&name=test2&name=test3等等......并保存到DB中:

name = ['test1', 'test2', 'test3']

这里一切都很好,但是......

当我想显示我的表单来编辑现有元素时,我真的不知道如何将此列表name = ['test1', 'test2', 'test3']中的数据加载到我的ModelForm +如何使用数据生成这些附加字段。

有关于此的任何想法吗?

1 个答案:

答案 0 :(得分:0)

我还没有这样做,但我目前正在进行的项目将来需要它,所以我已经研究了几个来源。 虽然this tutorial很老,但我认为它包含一些仍然适用的关键概念。 该教程涉及django教程,即有多种选择的民意调查。下面的代码概述了在一个民意调查问题中应该有三个选择表格。

pform = PollForm(instance=Poll())
cforms = [ChoiceForm(prefix=str(x), instance=Choice()) for x in range(0,3)]

您说您希望表单显示现有元素以进行编辑。 所以这里的Choice()应该替换为模型的实例,所以对你来说你做了类似instance = name1的事情,其中​​name1 = Name.objects.get(id =&#39 ; 1')或其他一些查询来获取模型的实例。

本教程的作者还记下了这个问题:

"有了这个,你现在有了一个可以一次为它添加一个Poll和3 Choice对象的视图。

创建视图以编辑相同的对象非常相似,您只需要查询Poll和Choice对象并使用它们而不是空实例。您还可以使用Choice ID作为ChoiceForm实例的前缀。使用ModelForm的好处在于,一旦将实例arg从新对象更改为现有对象,它就会变成编辑表单而不是添加表单,因此您无需更改任何内部,从添加到编辑"