Django Crispy表单和选项组

时间:2017-01-06 17:05:25

标签: django django-crispy-forms optgroup

我一直在搜索Crispy Forms文档以及一般网页搜索以获得答案。

Crispy Forms可以使用forms.Select小部件在ChoiceField中输出<optgroup>吗?或者我必须将数据带入上下文并在模板中以老式的方式构建表单吗?

谢谢!

2 个答案:

答案 0 :(得分:4)

choices docs举例说明如何对您的选择进行分组。

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

如果你这样做,那么select小部件应该输出optgroups,无论你是否使用crispy表单。

答案 1 :(得分:0)

USER_GENERATED_TEMPLATES = MessageTemplate.objects.filter(Q(client=client_id) | Q(client=None) & Q(user_generated=True))
DEFAULT_TEMPLATES = MessageTemplate.objects.filter(Q(client=client_id) | Q(client=None) & Q(user_generated=False))

# Set the initial TEMPLATE CHOICES list to include the Default Templates choice object
TEMPLATE_CHOICES = [('Default Templates',([[template.id, template.name] for template in DEFAULT_TEMPLATES]))]

# If there are user generated templates, append the TEMPLATE_CHOICES list to include them
if USER_GENERATED_TEMPLATES.count() > 0:
    TEMPLATE_CHOICES.append(('Saved Templates',([[template.id, template.name] for template in USER_GENERATED_TEMPLATES])))

# Set the 'template' form field to a ChoiceField using the Select widget populated by the TEMPLATE_CHOICES list.
self.fields['template'] = forms.ChoiceField(widget = forms.Select(), choices=TEMPLATE_CHOICES)