我希望用户能够从下拉列表中选择一个时间段,然后选择该时间跨度所需的约会数量并将其添加到列表中。我已经能够通过简单的javascript和Html实现这一点,但是在用户点击“提交”之后如何从表中获取所有值是不知所措的。
如果我使用Django的表单API,那么表格中的字段将显示为可编辑的文本框。有没有办法用标签/不可编辑的文本而不是字段来制作表单?这样我就可以使用javascript编辑标签,并将值传递给Post上的视图。
我是Django的新手,所以欢迎任何建议。
Forms.py示例 - 不是我想要的:
class AppointmentForm(forms.Form):
TimePeriod = forms.IntegerField(label='Time Period')
Amount = forms.IntegerField(label='Amount')
AppointmentFormSet = formset_factory(AppointmentForm)
答案 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 %}