在模板中动态生成表单

时间:2014-06-06 22:05:31

标签: django django-forms django-templates django-views

我有一个FormSet来生成Member对象。

class MemberBuilder(forms.Form):
    first_name = forms.CharField(max_length=128)
    last_name = forms.CharField(max_length=128)
    role = forms.CharField(max_length=128)

FormSet

MemberFormSet = formset_factory(MemberBuilder, max_num=30)

我想以这样的方式显示此表单中的字段。 enter image description here

因此,当我单击Add Member时,会在下面生成另一组字段。

enter image description here

我可以在html中使用一些jquery生成其他字段。

是否有pythonic / Django方法可以做到这一点?

1 个答案:

答案 0 :(得分:1)

我不确定如何在python / django中执行此操作,但在rails中你会将其发布到create操作但是使用javascript响应,然后在执行的脚本响应中你将使用jquery更新页面(确保表单助手中的表单remote: true设置为当然)。

  1. 我会添加一个jquery的监听器,当点击提交按钮时,它会被提取。
  2. 将表单中的数据发布到创建操作。
  3. 更新html以显示它已发布,可能将表单更改为普通html,表单值为html值(如果您不想,则不需要执行此步骤。)
  4. 等待服务器响应脚本(执行完毕)
  5. 在服务器的脚本中,我会找到 Last 表单(带有jquery)。
  6. 在其后添加更多包含从部分呈现的另一个表单的html。
  7. 那就是说,一些简单的谷歌foo提出了这个:

    我认为这个可能是最有帮助的,因为它与你正在做的类似: http://stellarchariot.com/blog/2011/02/dynamically-add-form-to-formset-using-javascript-and-django/

    看看他们中的任何一个,他们都应该帮忙。

    我毫不怀疑有人可能会编写更深入的技术帖子,但它的工作方式可能类似于我的建议。

    编辑:更好的方法是让响应脚本调用客户端函数来执行此操作,这样响应有效负载甚至更小,因此您的响应更快。另外,让响应脚本触发该功能意味着您可以确保服务器端的内容也已正确执行。