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">