我使用简单的django表单
class MassPaymentForm(forms.ModelForm):
class Meta:
model = LeasePayment
fields = ['payment_type', 'is_deposit', 'amount', 'method', 'payment_date', 'description']
在我的模板上,我使用AJAX创建了几个链式下拉列表
<form method="POST" class="form" action="" method="get">
<div class="form-group">
{% csrf_token %}
<br><br>
<b>Building:</b><br>
<select name="building" id="building" onchange="getunit();">
<option id="-1">Select building</option>
</select>
<br>
<b>Unit:</b><br>
<select name="unit" id="unit" onchange="getlease();">
<option id="-1">Select unit</option>
</select>
<br>
<b>Lease:</b><br>
<select name="lease" id="lease" onchange="getleaseterm()">
<option id="-1">Select lease</option>
</select>
<br>
<b>Term:</b><br>
<select name="leaseterm" id="leaseterm">
<option id="-1">Select lease term</option>
</select>
{{ form|crispy}}
{{ form.media }}
<BR><BR>
<button type="submit" class="btn btn-primary btn-primary">Save</button>
</div>
</form>
我需要'lease'和'leaseterm'作为我的表单的一部分,因为它们是模型中的必填字段。 如何将这些AJAx动态生成的下拉列表作为我的Django表单的一部分?
答案 0 :(得分:1)
如果它们是您模型的一部分,只需将它们直接添加到您的表单即可。或者,如果模型字段默认为不适用于验证的内容,则直接将其覆盖为标准表单字段。由于您在HTML中显式呈现它们,因此您不希望它们呈现。因此,您应该向窗口小部件添加一个css类以将其隐藏在浏览器中(使用javascript完全删除它们),否则您将拥有两个具有相同名称的输入字段。
class MassPaymentForm(forms.ModelForm):
unit = CharField(widget=HiddenInput(attrs={'class': 'to-remove'})
lease = CharField(widget=HiddenInput(attrs={'class': 'to-remove'})
leaseterm = CharField(required=False, widget=HiddenInput(attrs={'class': 'to-remove'}) # just as an example
class Meta:
# rest of Meta class here