0

一个新手,我遇到了一个问题,我觉得这更多是因为我在尝试之前阅读了太多关于它的内容。现在,由于我正在尝试,这让我感到困惑。希望您能抽出一些时间来提供帮助。

这是我想要做的。

我想在 HTML 上动态添加模型表单字段。所以对于前; 用户正在尝试向配方添加步骤,他/她可以添加多个步骤,甚至可以删除其中一些步骤。我希望这在它自己呈现的页面上动态发生。

我想从一个非常简单的例子开始。

我在 django 文档中准备好了表单集和模型表单集。此外,已经经历了许多 SO 答案。在许多情况下,这些字段是在不使用表单集的情况下添加的。

我自己尝试了一些例子,但我认为我把我读过的所有东西都混在一起了。

此外,我的 js 不是那么强大,但我将它用于我尝试过的示例,它们似乎没有工作,但它们不是我的担心。

这是我从 SO 上的一个答案中尝试的代码:

视图.py

def myview(request):
if request.method == 'POST':
    form = MyForm(request.POST, extra=request.POST.get('extra_field_count'))
    if form.is_valid():
        print "valid!"
else:
    form = MyForm()
return render(request, "test/test.html", { 'form': form })

表格.py

class MyForm(forms.Form):
    original_field = forms.CharField()
    extra_field_count = forms.CharField(widget=forms.HiddenInput())

    def __init__(self, *args, **kwargs):
        extra_fields = kwargs.pop('extra', 0)

        super(MyForm, self).__init__(*args, **kwargs)
        self.fields['extra_field_count'].initial = extra_fields

        for index in range(int(extra_fields)):
            # generate extra fields in the number specified via extra_fields
            self.fields['extra_field_{index}'.format(index=index)] = \
            forms.CharField()

模板

{% extends 'base.html' %}
<script>
{% block jquery %}
    form_count = $("[name=extra_field_count");
    // get extra form count so we know what index to use for the next item.
    $("#add-another").click(function() {
        element = $('<input type="text"/>');
        element.attr('name', 'extra_field_' + form_count);
        $("#forms").append(element);
        // build element and append it to our forms container

        form_count ++;
        $("[name=extra_field_count]").val(form_count);
        // increment form count so our view knows to populate 
        // that many fields for validation
    })
{% endblock %}
</script>

{% block content %}
<form method="POST">{% csrf_token %}
<div id="forms">
    {{ form.as_p }}
</div>
<button id="add-another">add another</button>
<input type="submit" />
</form>

{% endblock %}

好吧,这并不成功。当我单击“添加另一个字段”时,页面重新加载并给出此值错误“int() 的无效文字,基数为 10:'NaN'”。无论如何,我不知道这是否适合我。有点困惑我会用 ModelForm 的 formset 得到这个。

4

1 回答 1

0

您正在为 form_count 分配一个字符串:

form_count = $("[name=extra_field_count");

并试图增加它。

form_count ++;

改为尝试:

form_count = parseInt($("#id_extra_field_count").val(),10);
于 2016-05-12T05:21:46.807 回答