2012-06-02 46 views
1

我跟着this,但我仍然无法显示CHOICES作为我的窗体上的复选框。Django - 如何显示模型的选择作为复选框

models.py

class Car(models.Model): 
    TYPE_CHOICES = (
     ('s', 'small'), 
     ('m', 'medium'), 
     ('b', 'big'), 
    ) 
    type = models.CharField(max_length=1, choices=TYPE_CHOICES) 

forms.py

from django import forms 
from django.forms.widgets import CheckboxSelectMultiple 

from cars.models import Car 

class AddCar(forms.ModelForm): 
    class Meta: 
     model = Car 
     type = forms.MultipleChoiceField(choices=Car.TYPE_CHOICES, widget=forms.CheckboxSelectMultiple()) 

回答

3

您需要使用forms.RadioSelect()而不是forms.CheckboxSelectMultiple()因为它的单值。

要覆盖小部件的ModelForm,check the doc

class AddCar(forms.ModelForm): 
    class Meta: 
     model = Car 
     widgets = {'type': forms.RadioSelect} 

或在你的问题中,type线应高于class Meta线,内AddCar

class AddCar(forms.ModelForm): 
    type = forms.ChoiceField(choices=Car.SCENERY_CHOICES, widget=forms.RadioSelect) 

    class Meta: 
     model = Car 
+0

他可以使用复选框输入。应该使用[this](https://docs.djangoproject.com/en/dev/ref/forms/widgets/#django.forms.CheckboxInput)。所以在你的例子中可以使用:'widgets = {'type':forms.CheckboxInput}' – marianobianchi

+0

@marianobianchi恐怕他不能,'CheckboxInput'小部件用于布尔值。 – okm

1

您使用Route.SCENERY_CHOICESCar.TYPE_CHOICES

+0

良好的渔获物,但不解决我的问题。 – howtodothis

0

多数民众赞成在forms.forms

class AddCarForm(forms.Form): 
    type = forms.MultipleChoiceField(required=False, 
    widget=forms.CheckboxSelectMultiple, choices=TYPE_CHOICES) 

多数民众赞成在forms.ModelForm

class AddCar(forms.ModelForm): 
    type = forms.MultipleChoiceField(required=False, 
    widget=forms.CheckboxSelectMultiple, choices=TYPE_CHOICES) 

    class Meta: 
     model = Car 

然后在模板中,这是非常重要的是使用这个

{{ form.type }} 

即不叫type类似HTML的<input type="checkbox" name="type" id="id_type">

相关问题