带有按钮的表单向其添加新字段

Posted

技术标签:

【中文标题】带有按钮的表单向其添加新字段【英文标题】:Form with button adding new field to it 【发布时间】:2016-05-01 01:20:51 【问题描述】:

我想知道用 Django 创建动态表单的最佳方法是什么。

假设有一种训练形式可以包含一些锻炼。锻炼次数未指定 (1+)。如何使用添加新锻炼的按钮创建这样的表单?

编辑:

我的后端是用 Django/Python 编写的。 到目前为止,我的模型如下所示:

class WorkoutForm(forms.Form):
    name = forms.CharField(max_length = 45)
    description = forms.CharField(widget = forms.Textarea)

class TrainingForm(forms.Form):
    name = forms.CharField(max_length = 45)
    all_workouts = Workout.objects.all()
    description = forms.CharField(widget = forms.Textarea)
    selected_workouts = forms.MultipleChoiceField(required=False,
        widget=forms.SelectMultiple, choices=[(o.id, o.name) for o in all_workouts])

但我想将其更改为动态表单,并在单击添加按钮后添加新的锻炼字段。

【问题讨论】:

你不需要 django。你可以只使用简单的 jQuery。 @PraveenKumar 他们不是在问表单集,特别是内联模型表单集吗? adamura88,在你的情况下,锻炼是一个相关的模型吗?请粘贴您的型号代码。 @jpic 意思是,我的回答没有帮助? 我不确定,验证取决于他们的数据模型。 【参考方案1】:

这样的事情对你有帮助吗?

$(function () 
  $("#add").click(function (e) 
    e.preventDefault();      // Make sure nothing happens.
    $(".master")
      .clone()                // Clone this
      .removeClass("master")  // Remove the master class
      .find("input").attr("name", "workout[]").end() // Change the input name
      .appendTo("form");      // Append it to the form.
  );
);
label display: block;
.master display: none;
<script src="https://code.jquery.com/jquery-2.1.4.js"></script>
<form action="">
  <label class="master">
    <strong></strong>
    <input type="text" />
  </label>
  <a href="#" id="add">Add New</a>
  <label>
    <strong></strong>
    <input type="text" name="workout[]" />
  </label>
</form>

【讨论】:

【参考方案2】:

我认为这样的方法也可以,具体取决于您的需要。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form>
  <div id="workouts">
    <div class="workout" id="workout1">
      <label>Workout:</label>
      <input type="text">
    </div>
  </div>

  <button id="addWorkout" type="button">Add</button>
</form>
<script>
  $("#addWorkout").on("click", function(e) 
    e.preventDefault();
    var last = $("#workouts").last().attr("id")
    template = "<div class='workout' id='workout" + parseInt(last[-1])+1 + "'><label>Workout:</label> <input type='text'>"
    $("#workouts").append(template);
  );
</script>

【讨论】:

好的,但是在 Django 端怎么做呢? @adamura88 我可以给你一个想法,基本上你需要在 trainingform 类中编写一个类似add 函数的功能,该函数将调用会创建新字段的锻炼表单类(我假设),然后是另一个 update 函数,它将更新锻炼字段的数量

以上是关于带有按钮的表单向其添加新字段的主要内容,如果未能解决你的问题,请参考以下文章

Extjs 无法在表单面板中动态添加/删除字段

带有自定义图像和文本的表单按钮

Django admin - 如何在自定义管理表单中为多对多字段添加绿色加号

带有两个提交按钮的 Django 表单。 . .一个需要字段,一个不需要

带有rails的datepicker js奇怪的东西

带有 ngFor 输入的 Angular 2 模板驱动表单