在Django中创建动态表单并在post上检索值

时间:2016-02-08 19:05:44

标签: django django-forms

我希望用户能够从下拉列表中选择一个时间段,然后选择该时间跨度所需的约会数量并将其添加到列表中。我已经能够通过简单的javascript和Html实现这一点,但是在用户点击“提交”之后如何从表中获取所有值是不知所措的。

如果我使用Django的表单API,那么表格中的字段将显示为可编辑的文本框。有没有办法用标签/不可编辑的文本而不是字段来制作表单?这样我就可以使用javascript编辑标签,并将值传递给Post上的视图。

我是Django的新手,所以欢迎任何建议。

Example

Forms.py示例 - 不是我想要的:

class AppointmentForm(forms.Form):
TimePeriod = forms.IntegerField(label='Time Period')
Amount = forms.IntegerField(label='Amount')

AppointmentFormSet = formset_factory(AppointmentForm)

2 个答案:

答案 0 :(得分:0)

当我解决了更复杂的生成表单时,我只创建了一个视图,它收集了一些数据,设置了上下文和渲染模板。

该模板是“旧式”形式,所有标签都是用手/循环写的,就像

一样
{% for p in pairs %}
  <option name="name_{{p.id}}" value="{{p.val}}">
{% endfor %}

{% for v in vars %}
  <input type="text" name="{{v.name}}" value="{{v.val}}">
{% endfor %}

并且表单以视图结束,我在request.POST上循环并手动解析(主要是)

不是很好的Django方式,但是你可以用这种方法做任何事情(并且在你想要的任何时候自己拍摄任何一条腿)

答案 1 :(得分:0)

大概是&#34;标签&#34;你只是指不可编辑的文本,所以它可能是<div><p>等 - 在这种情况下,你需要有一个隐藏的输入,它反映了标签的内容,即

<div class="label">Text here</div>
<input type="hidden" name="form-field-name" value="Text here">

要在表单中实现此目的,请使用forms.HiddenInput小部件:

class AppointmentForm(forms.Form):
    time_period = forms.IntegerField(widget=forms.HiddenInput)

显然django表单不会以你需要的方式呈现,所以你需要使用自定义html渲染它,它可能看起来像这样:

{% for field in form %}
    <div class="label">{{ field.data }}</div>
    {{ field }} 
{% endfor %}