我有一份工作清单,每个工作都属于一个小组:
class Job(models.Model):
name = models.CharField(max_length = 200)
group = models.CharField(max_length = 200)
如何显示SelectField
,其中哪些组突出显示,相应的作业列在下面?
我已经看过this这篇文章,这是我的第一步,但我想了解更多细节。
感谢
答案 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)
但是,有一个内置的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>