Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django制造两个<;选择>;而不是一个,尝试使用引导(表单上传)_Python_Html_Django_Twitter Bootstrap_Templates - Fatal编程技术网

Python Django制造两个<;选择>;而不是一个,尝试使用引导(表单上传)

Python Django制造两个<;选择>;而不是一个,尝试使用引导(表单上传),python,html,django,twitter-bootstrap,templates,Python,Html,Django,Twitter Bootstrap,Templates,所以我试图用django创建一个网站,我遇到了一个问题,当我创建一个选择列表时,会出现两个 Html: 我只需要引导选择,但似乎传递给它的值并不重要,它将第二个select语句作为输入 您必须调整表单类和模板 首先,如果你想让你的表单为你的课程设置一个select输入,你必须在表单上明确定义它。您的模型只包含一个CharField,默认情况下,您的表单也只提供一个CharField from django import forms from .models import courses as

所以我试图用django创建一个网站,我遇到了一个问题,当我创建一个选择列表时,会出现两个

Html:


我只需要引导选择,但似乎传递给它的值并不重要,它将第二个select语句作为输入

您必须调整表单类和模板

首先,如果你想让你的表单为你的
课程设置一个select输入,你必须在表单上明确定义它。您的模型只包含一个
CharField
,默认情况下,您的表单也只提供一个
CharField

from django import forms

from .models import courses as course_choices


FileForm(forms.ModelForm):
    courseChoices = forms.ChoiceField(choices=course_choices)

    class Meta:
        model = FileUploads
        fields = ('semesterChoices', 'document', 'courseChoices',)
请注意,您的表单现在有三个字段,其中一个被覆盖以使用
ChoiceField
而不是
CharField
,另一个被覆盖以使用默认表单字段作为相应的模型字段!如果你想为你的学期选择另一个
选项字段
,你必须对该字段进行同样的操作

然后在模板中,您必须手动呈现
字段,如下所示:

{# stuff before your form #}

<form action="/upload/" method="post" enctype="multipart/form-data">
    {% csrf_token %}
    <div class="form-group">
        {{ form.non_field_errors }}            

        {{ form.courseChoices.errors }}
        <select name="{{ form.courseChoices.name }}" id="{{ form.courseChoices.id_for_label }}" class="form-control">
            {% for value, name in form.courseChoices.field.choices %}
                <option value="{{ value }}">{{ name }}</option>
            {% endfor %}
         </select>

         {{ form.document.errors }}
         <label class="btn btn-default btn-file">
             <input type="file" style="display: none;" name={{ form.document.name }} id={{ form.document.id_for_label }}>
         </label>
    </div>
</form>

{# stuff after your form #}
{表单前的内容}
{%csrf_令牌%}
{{form.non_field_errors}}
{{form.courseChoices.errors}
{%表示值,名称为form.courseChoices.field.choices%}
{{name}}
{%endfor%}
{{form.document.errors}
{#表格后面的东西#}
另请参阅有关的文档

我不知道文件输入是否可以像这样使用引导

您也可以通过向模板中添加{{form.as_p}}来呈现完整的表单,以查看表单的未样式

在您的模型中,您将field courseChoices命名为field courseChoices,这有点让人困惑,因为您实际上一次只在其中存储一门课程,这是您给它的选择之一。因此,称之为“课程”毫无意义。相反,您应该调用选项的元组course\u choices,而您的模型字段只是course

有一点旁注:
在python中,人们通常更喜欢蛇的大小写而不是骆驼的大小写。因此,如果您想调整编码风格,请使用
课程选择
而不是
课程选择

谢谢!这对我来说是成功的!我是Django的noob,这帮助我理解Django正在解压表单字段,为了使其符合我的要求,我必须手动渲染字段。
from django import forms

from .models import courses as course_choices


FileForm(forms.ModelForm):
    courseChoices = forms.ChoiceField(choices=course_choices)

    class Meta:
        model = FileUploads
        fields = ('semesterChoices', 'document', 'courseChoices',)
{# stuff before your form #}

<form action="/upload/" method="post" enctype="multipart/form-data">
    {% csrf_token %}
    <div class="form-group">
        {{ form.non_field_errors }}            

        {{ form.courseChoices.errors }}
        <select name="{{ form.courseChoices.name }}" id="{{ form.courseChoices.id_for_label }}" class="form-control">
            {% for value, name in form.courseChoices.field.choices %}
                <option value="{{ value }}">{{ name }}</option>
            {% endfor %}
         </select>

         {{ form.document.errors }}
         <label class="btn btn-default btn-file">
             <input type="file" style="display: none;" name={{ form.document.name }} id={{ form.document.id_for_label }}>
         </label>
    </div>
</form>

{# stuff after your form #}