如何在django中创建下拉菜单

时间:2017-12-12 21:19:43

标签: python html django

我是django的新手,想为选项创建一个下拉菜单。我很困惑我应该在forms.py中包含什么以及如何在index.html上调用该表单。

我的forms.py

    from django import forms

    class MyModel2(forms.Form):
       class Meta:
           model = MyModel
           fields = ['color']

我的index.html

    <form method="POST" action = "">{% csrf_token %}

            <p>Choose color</p> {{ form.color}}
            <br><br>
            <input type="submit" value="Submit!"/>

        </form>

我的models.py

    from __future__ import unicode_literals

    from django.db import models

    COLOR_CHOICES = (
       ('green','GREEN'),
       ('blue', 'BLUE'),
       ('red','RED'),
       ('orange','ORANGE'),
       ('black','BLACK'),
    )

    class MyModel(models.Model):
        color = models.CharField(max_length=6, choices=COLOR_CHOICES, default='green')

谢谢!

3 个答案:

答案 0 :(得分:2)

因此,您唯一的问题是,在尝试使用CharField表单而不是forms.Form时,您将模型字段声明为forms.ModelForm。如果您要使用forms.Form,则需要声明ChoiceField以自动获取选择下拉列表。

您还可以在表单中使用forms.ModelForm代替forms.Form,我非常确定这会使其正常运行。不幸的是,ModelForm和Forms不会以同样的方式处理字段。

答案 1 :(得分:1)

小部件可能就是这里的答案,但你不一定需要使用ModelForm(除非,因为看起来你想要使用你的模型,但你不需要。)尝试一些东西。像这样:

# forms.py
class MyModel2(forms.Form):
   color = forms.CharField(widget=forms.Select)

和...

<!-- index.html -->
<form method="POST" action = "ACTION_OR_VIEW_URL_ON_SUBMIT_HERE">{% csrf_token %}
    <label for="colorSelect">Choose color</label>
    <select type="text" id="colorSelect" name="colorSelect">
        <option selected>GREEN</option>
        <option>BLUE</option>
        <option>RED</option>
        <option>ORANGE</option>
        <option>BLACK</option>
    </select>
    <br><br>
    <input type="submit" value="Submit!"/>
</form>

或者,如果您确实想使用ModelForm,请查看guillermo chamorro的答案,了解如何使用小部件。

答案 2 :(得分:-1)

首先使用ModelForm代替Form,然后您可以使用widgets属性:

from django.forms import ModelForm

# Mind the name of your form!!

class MyModelForm(ModelForm):
   class Meta:
       model = MyModel
       fields = ['color']
       widgets = {
           # Here you define what input type should the field have
           'color': Select(attrs = { 
               'class': 'form-control',
           }),
       }

您没有“在我的index.html上调用该表单”。使用views来调用表单并设置要使用的html模板。

使用基于类的视图:

from django.views.generic import CreateView
from .models import MyModel
from .forms import MyModelForm

class ColourCreateView(CreateView):
    model = MyModel
    template_name = 'index.html'
    form_class = MyModelForm