Джанго: как выделить группы в `SelectField`? - PullRequest
0 голосов
/ 07 декабря 2010

У меня есть список заданий, каждое из которых входит в группу:

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

Как отобразить SelectField, в котором группы выделены цветом, а соответствующие задания перечислены ниже?

Я видел этот этот пост, который может быть первым шагом, но я хотел бы получить более подробную информацию.

спасибо

Ответы [ 2 ]

1 голос
/ 07 декабря 2010

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>
1 голос
/ 07 декабря 2010

Возможно, вы захотите подумать о создании group a ForeignKey для Group модели, но с данной моделью вы можете воспользоваться тем фактом, что Django формы 'ChoiceFields позволяют вам указать группы для вариантов выбора , которые отображаются как <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)
...