模板中的ModelForm与分组选择字段

时间:2011-12-12 16:15:47

标签: django django-models django-forms django-templates

我有一个分组的类别字段。问题是我已经创建了一个搜索表单,但是当我尝试在模板中向用户提供表单时,它就出错了。

models.py

MEDIA_CHOICES = (
    ('Audio', (
        ('vinyl', 'Vinyl'),
        ('cd', 'CD'),
    )
    ),
    ('Video', (
        ('vhs', 'VHS Tape'),
        ('dvd', 'DVD'),
    )
    ),
    ('unknown', 'Unknown'),
)

category = models.CharField(max_length=20, choices=MEDIA_CHOICES, verbose_name=_(u'Category'))

forms.py(搜索)

class SearchingForm(forms.Form):

    "Search Box"
    search = forms.CharField(max_length=100, required=False, label=(_(u'Search')))

    music_kind = forms.MultipleChoiceField(choices=MEDIA_CHOICES, required=False,
                                        label=(_(u'Kind')),    
                                        widget=forms.CheckboxSelectMultiple(),
                                        )

template.html

    {{ form.search }}
    {{ form.place_kind }}

我向用户显示这样的表单,问题是当我使用浏览器渲染时我有类似的东西(在每行中,它有一个复选框):

(('vinyl', 'Vinyl'), ('cd', 'CD'))
(('vhs', 'VHS Tape'), ('dvd', 'DVD'))
Unknown

我删除了'widget = forms.CheckboxSelectMultiple()'属性,但是我没有复选框。那么,我如何使用复选框字段呢?

2 个答案:

答案 0 :(得分:1)

我认为您的数据类型不匹配。您想要在单个CharField中存储多个值。当然,你可以在那里保存键值对的字典,但是你必须将它解析回选择,这是一个巨大的痛苦。

我会将您的MEDIA_CHOICES移动到数据库表,然后在SearchingForm中,您可以执行CheckboxSelectMultiple,表单将按预期运行。

答案 1 :(得分:1)

我不确定,但我想知道选择组是否只适用于选择框(不是复选框)。