django表单下拉列表中的初始值不为空?

django表单下拉列表中的初始值不为空?,django,django-forms,Django,Django Forms,我有一个表格,其中定义了报告的选择标准。 从模型中自动填充的下拉列表“building”之一不应为必填项,其默认值为空。我不能完成空的部分 我想要下拉列表中的第一个字段 以我的形式 building = forms.IntegerField( widget=forms.Select( choices=Building.objects.all().values_list('id', 'name') ) , required=False ) 初始化代码时在视图文件中 form =

我有一个表格,其中定义了报告的选择标准。 从模型中自动填充的下拉列表“building”之一不应为必填项,其默认值为空。我不能完成空的部分

我想要下拉列表中的第一个字段

以我的形式

building = forms.IntegerField(
widget=forms.Select(
    choices=Building.objects.all().values_list('id', 'name')
    ) , required=False
 )
初始化代码时在视图文件中

form = PaymentRangeForm(initial = {'building': 0 })
我在模板中使用了crispy表单,但我不认为这有什么区别

     <form method="POST"  class="form" action="" method="get">
                {% csrf_token %}
                {{ form|crispy}} 
                <br>
                <button type="submit" class="btn btn-primary btn-primary">Search</button>
    </form>

{%csrf_令牌%}
{{form | crispy}}

搜寻
我没有得到任何错误,但默认值不是空的,它的值是来自模型的第一条记录

我缺少什么?

根据,也许您可以在不使用.all()的情况下尝试一下,如下所示


选项=Building.objects.values\u list('id','name')

将crispy\u表单\u标记加载到模板顶部

{% load crispy_forms_tags %}

 <form method="POST"  class="form" action="" method="get">
                {% csrf_token %}
                {{ form|crispy}} 
                <br>
                <button type="submit" class="btn btn-primary btn-primary">Search</button>
</form>
{%load crispy_forms_tags%}
{%csrf_令牌%}
{{form | crispy}}

搜寻
好的解决方案很简单。在我的from文件中,我添加了

from django.db.models.fields import BLANK_CHOICE_DASH
并更新了表格

class PaymentRangeForm(forms.Form):

    start_date = forms.DateField(widget=forms.TextInput(attrs={'type': 'date'} ))
    end_date = forms.DateField(widget=forms.TextInput(attrs={'type': 'date'} ))
    building = forms.ChoiceField(choices=BLANK_CHOICE_DASH + list(Building.objects.values_list('id', 'name')), required=False)

你是否在模板中加载crispy表单?是的,我加载。我刚刚更新了我的原始帖子。请提供你的模板。我用formNo更新了原始帖子,没有任何区别。两种情况下的结果相同。谢谢,但不需要。目前它们已经存在于我的包含中。如果我的表单中没有crispy标记,则会出现错误。您可以更轻松地执行
…forms.ChoiceField(choices=[('',----')]+list(Building.ob…
)。