Django:如何在'SelectField`中突出显示组?

时间:2010-12-07 12:34:36

标签: django django-templates django-forms

我有一份工作清单,每个工作都属于一个小组:

class Job(models.Model):
    name = models.CharField(max_length = 200)
    group = models.CharField(max_length = 200)

如何显示SelectField,其中哪些组突出显示,相应的作业列在下面?

我已经看过this这篇文章,这是我的第一步,但我想了解更多细节。

感谢

2 个答案:

答案 0 :(得分:1)

您可能想要考虑将group ForeignKey变为Group模型,但是根据给出的模型,您可以利用Django形成'ChoiceFields {{3你到allow,它们呈现为<optgroup> s:

from itertools import groupby
from operator import attrgetter

from django import forms

from myapp.models import Job

def get_grouped_job_choices():
    choices = []
    for group, jobs in groupby(Job.objects.all().order_by('group', 'name'),
                               attrgetter('group')):
        choices.append((group, [(job.pk, job.name) for job in jobs]))
    return choices

class ExampleForm(forms.Form):
    job = forms.ChoiceField(choices=get_grouped_job_choices)

答案 1 :(得分:1)

insin提供了一种很好的观察方式。

但是,有一个内置的django模板标签可以做到这一点!

您可以使用regroup模板标记。

来自文件,

{% regroup job by group as group_list %}

<ul>
{% for group in gender_list %}
    <li>{{ group.grouper }}
    <ul>
        {% for item in group.list %}
        <li>{{ item }} </li>
        {% endfor %}
    </ul>
    </li>
{% endfor %}
</ul>