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