- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
如何将动态表单添加到模板中的 django 表单集,而无需烦人的 html 模板输出副本?
我有一个结果表单数量未知的表单集,我需要通过按一个按钮直接在模板中添加一些表单。
最佳答案
这个 self 回答是基于this post由 Nick Lang 编写,但我们将以这种方式进行简化,我们不再需要复制/粘贴整个表单 html。
我们有一个内联表单集,它是在这样的 View 中创建的:
items_formset = inlineformset_factory(Parent, Item, form=ItemForm, extra=1)
item_forms = items_formset()
接下来,我们需要为 formset 表单创建一个模板,我们可以使用 formset 实例的 empty_form
属性来完成它,它会生成一个 html 表单模板,其中表单的每个“id”编号是替换为 __prefix__
字符串,例如:
<!--
{{ item_forms.empty_form }}
{# <!-- or for crispy forms --> {% crispy item_forms.empty_form item_forms.form.helper %} #}
-->
因此,首先我们需要用一个 id 替换这个 __prefix__
并使用这个模板添加一个表单。
这是一个表单模板代码片段,我们可以使用它来创建新元素:
<script type="text/html" id="item-template">
<div id="item-__prefix__">
{{ item_forms.empty_form }}
<!-- crispy: {% crispy item_forms.empty_form item_forms.form.helper %} -->
</div>
</script>
然后我们需要显示表单的主要部分:
<form action="" method="post">
{% csrf_token %}
{{ item_forms.management_form }}
<div id="items-form-container">
{% for item_form in item_forms %}
<div id="item-{{ forloop.counter0 }}">
{{ item_form.id }}
{{ item_form.as_p }}
{# <!-- or for crispy forms --> {% crispy item_form %} #}
</div>
{% endfor %}
</div>
<a href="#" id="add-item-button" class="btn btn-info add-item">Add Item</a>
</form>
最后我们需要添加一些 JS(jquery,使用 1.9.1 和 2.1.0 测试过)来添加下一个 formset 表单。请注意,我们不会使用 underscore.js
,因为在这种情况下不需要它:只需 str.replace 将 __prefix__
替换为下一个“id”编号)
<script>
$(document).ready(function() {
$('.add-item').click(function(ev) {
ev.preventDefault();
var count = $('#items-form-container').children().length;
var tmplMarkup = $('#item-template').html();
var compiledTmpl = tmplMarkup.replace(/__prefix__/g, count);
$('div#items-form-container').append(compiledTmpl);
// update form count
$('#id_item_items-TOTAL_FORMS').attr('value', count+1);
// some animate to scroll to view our new form
$('html, body').animate({
scrollTop: $("#add-item-button").position().top-200
}, 800);
});
});
</script>
就是这样,只需单击“添加项目”按钮,就会出现一个新的表单集项目。
请务必将此示例替换为您的应用名称/模型名称。
关于javascript - 以正确的方式使用javascript将动态表单添加到django formset,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21260987/
我正在关注this教程展示了如何在 Django 中使用表单集。本教程使用 django-dynamic-formset JQuery 插件,它可以像 Django admin 中一样启用表单集的编辑
好的,所以我有一个有效的表单集。但是给了我一个错误,该表单没有属性cleaned_data .. 老实说,我完全不知道发生了什么.. 我在终端上尝试了我的代码,它返回了一个空字典..没有错误.. 形式
我有一个显示多个 Formsets 的页面,每个 Formsets 都有一个前缀。使用 formset_factory 创建表单集默认选项,包括 extra=1 .可以使用 JavaScript 添加
如何使用 request.POST 从表单集中更新对象? 这是我的代码,我的问题是这总是会创建一个新的 PhoneNumber目的。但是我想更新旧的PhoneNumber目的。 def contact
我正在使用 Django 1.4 并且我正在为 Formsets 苦苦挣扎。我已经阅读了文档和很多 SO 问题。我越来越不知道它们是如何工作的。 - Fomsets 应该像这样配置/声明吗? 我是如何
给定以下模型: class Graph(models.Model): owner = models.ForeignKey(User) def __unicode__(self):
如何将动态表单添加到模板中的 django 表单集,而无需烦人的 html 模板输出副本? 我有一个结果表单数量未知的表单集,我需要通过按一个按钮直接在模板中添加一些表单。 最佳答案 这个 self
我正在为一个乐队制作出勤登记表。我的想法是在表格的一部分中输入演出或排练的事件信息。这是事件表的模型: class Event(models.Model): event_id = models
如何将自定义标签添加到我的表单集中? {{ formset.management_form }} {% for form in formset %} {% for f
我在 django-users 列表上发布了这个问题,但那里还没有回复。 我有看起来像这样的模型: class ProductGroup(models.Model): name = mode
模型.py: class ExperienceSynopsis(Audit): user = models.ForeignKey(User, null =
当我使用循环呈现我的表单集时,一切正常。 当我尝试通过分别访问每个字段(用于前端目的)手动呈现它时,表单正在呈现但提交失败。每个字段都是相同的,所以我猜在使用我不知道的表单集时创建了一个隐藏字段。 这
我需要的表单之一是简单字段(例如“部门”、“建筑物”和“房间编号”)和动态生成的字段对(例如“姓名”和“电子邮件”)的组合。理想情况下,编辑简单字段的内容和添加/删除动态字段对将在单个表单上完成。 在
我正在尝试创建一个像这样的简单帖子共享表单。 我正在使用 formset 进行图像上传。但这给了我多种输入,如您所见。每个输入也可以选择单个图像。但我正在尝试使用单个输入上传多个图像。 View .p
在我的 Django 应用程序中,我有一个从简单(非模型)表单创建的表单集,其中 extra=1 (以允许 javasript 稍后添加更多表单)。 class SomeForm(forms.Form
我在显示具有多个实例对象的内联表单集时遇到问题。我想要一份所有 Owner 的列表以及他们所有 Pet 的内联表单集,全部一页。 下面的代码可以工作,但一次调用 1 个所有者对象。有什么建议吗? 这是
无法弄清楚如何过滤表单集以仅显示登录用户的博客文章。表单呈现得很好,但是它允许任何用户将照片分配给任何博客文章,无论谁拥有该博客文章。如何将博文选项过滤为仅适用于登录用户? View .py @log
我正在尝试为表单集编写单元测试,但在尝试实例化它时出现以下错误。 错误: Traceback (most recent call last): File "/home/jwelborn/Doc
我正在创建一个简单的 Django 应用程序,您可以在其中创建包含配料的食谱。在我的 RecipeCreate View 中,我有一个简单的表单集,其中包含一个 select 输入(您在其中选择产品)
如何检查表单集行是否被标记为已删除? for row in myformset: //check if row is mark as deleted 提前致谢! 最佳答案 https://do
我是一名优秀的程序员,十分优秀!