我是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')
谢谢!
答案 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