Django 文档说当在表单上使用 ModelChoiceField 并且表单设置为 required=False 并且模型设置为 blank=True 除了没有默认值外,我应该在我的 select 标签中收到一个免费的空选择。我不是。我对失去空选择所做的任何想法?
模型.py
class Location(models.Model):
location_name = models.CharField(max_length=50, blank=True)
address = models.CharField(max_length=50)
active = models.BooleanField(default=True)
def __unicode__(self):
return self.location_name
表格.py
class CalcForm(forms.Form):
startAddr = forms.ModelChoiceField(queryset=Location.objects.all(), required=False)
waypoint1 = forms.ModelChoiceField(queryset=Location.objects.all(), required=False)
waypoint2 = forms.ModelChoiceField(queryset=Location.objects.all(), required=False)
...
endAddr = forms.ModelChoiceField(queryset=Location.objects.all(), required=False)
模板.html
<form action="../calcview" method="get">{% csrf_token% }
<label>
<div>Start Address</div>
<select name="startAddr">
{% for location in form.fields.startAddr.queryset %}
<option value = "{ location.location_name }">{{location.location_name}}/option>
{% end for %}
</select>
...
</form>
请您参考如下方法:
如果您允许 Django 表单自动呈现表单字段,您将只会获得“免费”空选项。因为你自己在你的模板中呈现它(我不知道你为什么要这样做......)你需要自己添加空选择:
<select name="startAddr">
<option value="">-----------</option>
{% for location in form.fields.startAddr.queryset %}
<option value = "{ location.location_name }">{{location.location_name}}</option>
{% end for %}
</select>
您可以通过允许 django 表单为您呈现它来测试它:
<div>Start Address</div>
{{ form.startAddr }}
