javascript - Django:如何创建一个随用户点击而变化的动态表单?

标签 javascript python html django

我正在制作一个锻炼日历网站,用户可以在其中添加不同举重量、组数和次数等的锻炼。因此,我需要一个表单,在用户单击按钮时添加一个字段。我制作了一个模板和一些 JavaScript 来准确描述我想要实现的目标:

网址:

url(r'^add/(?P<year>[0-9]+)/(?P<month>[0-9]+)/(?P<day>[0-9]+)/$', views.add_workout, name = 'add_workout')

模板:

{% block hidden %}
{% include "workoutcal/liftrow.html" %} {# To be used by Javascript #}
{% include "workoutcal/cardiorow.html" %}
{% endblock %}

<form action="{% url 'add_workout' date.year date.month date.day %}" method="post">

    <div class="row">
        <div class="col-xs-2">
            <p id="date">{{ date.year }}-{{ date.month }}-{{ date.day }}</p>
            <input type="hidden" name="date" value="{{ date }}">
        </div>
    </div>

    <h2 class="col-xs-12">Lifts</h2>
    <div id="liftrows">
        {% for i in range %}
          {% include "workoutcal/liftrow.html" %}
        {% endblock %}
    </div>

    <div class="row">
        <div class="col-xs-0"></div>
        <label class="col-xs-2"><button type="button" id="addliftbutton">One more lift</button></label>
    </div>



    <h2 class="col-xs-12">Cardio</h2>

    <div id="cardiorows">
        {% include "workoutcal/cardiorow.html" %}
    </div>

    <div class="row">
        <label class="col-xs-2"><button type="button" id="addcardiobutton">One more cardio</button></label>
    </div>
    <div class="row">
        <div class="col-xs-10"></div>
        <label class="col-xs-2"><input type="submit" id="submitbutton" value="Save Workout"></label>
    </div>
</form>

JavaScript:

//Adding onclick to buttons
document.getElementById('addliftbutton').onclick = addLiftRow;
document.getElementById('addcardiobutton').onclick = addCardioRow;

for (var i=0; i<setsBoxes.length; i++){
    setsBox = setsBoxes[i];
    setsBox.onchange = insertRepFields;
}

function addLiftRow(){
    var liftRowElements = document.getElementById('liftrows');

    var hidden_liftrow = document.getElementById('hidden').getElementsByClassName('lift')[0];
    var new_liftrow = hidden_liftrow.cloneNode(true);

    liftRowElements.appendChild(new_liftrow);
}

function addCardioRow(){
    var cardiorows = document.getElementById('cardiorows');

    var hidden_cardiorow = document.getElementById('hidden').getElementsByClassName('cardio')[0];
    var new_cardiorow = hidden_cardiorow.cloneNode(true);

    cardiorows.appendChild(new_cardiorow);
}

function insertRepFields(){} // big function that inserts as many input fields as the number inside the box whose event called the function.

2个问题: 1.Django中有没有更好的方法来做到这一点? 2.如果这是最好的方法,我该如何将大量表单的数据发送回django?由于我不知 Prop 体有多少个字段,因此我不知道如何创建一个接受可变数量字段以及字段内字段的表单。

以下是填写好的表单的外观:

enter image description here

最佳答案

实现这一点的最佳方法是插入具有相同名称的输入,然后在 Django 中以列表形式获取所有这些输入,如下所示:

def view(request):
    inputs = request.POST.getlist('your_input_name')
    for i in inputs:
        Model.objects.create() # Save your model

关于javascript - Django:如何创建一个随用户点击而变化的动态表单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48053060/

相关文章:

javascript - Sails js 订阅 groupid 属性范围内的模型更改

javascript - 从主机编辑文件时,VM 中的 Nodemon 看不到更改

python - 根据索引合并两个数据帧(一个从数据透视表创建的 df)

html - 如何设置一个 div 与另一个 div 的高度相同?

javascript - 当屏幕上有由函数动态创建的多个元素时,具有 attr() 函数的函数不会执行所有语句

python - 过滤 Pandas 中的时间序列数据帧以给出每分钟的第一个数据点

python - Flask 路由到不同模块中具有相同名称的函数

html - 用响应式图像填充响应式 div

jquery - 两个并排的列,子项和子项的子项填充 100% 负边距

javascript - 如何在父级底部的图像周围环绕文本