Я пытаюсь получить список отдельных элементов в поле модуля и затем отобразить все элементы, связанные с этим полем.
Например, в системе школьной администрации есть школьный модуль и модель ученика. У каждого учащегося есть цвет, связанный с ним как поле «цвет». Я хочу создать страницу, на которой на странице перечислены все различные цвета в школе, а затем под каждым цветом список учащихся, принадлежащих к этому цвету.
Буду ли я писать эту функцию в представлениях?
Вот то, что я пока имею в views.py:
class SchoolColorDetailView(DetailView):
model=models.School
template_name='school_app/school_color_detail.html'
def get_context_data(self,**kwargs):
context = super().get_context_data(**kwargs)
context['colors']=Student.objects.all().order_by('color').distinct('color')
Это даст мне список всех цветов (но не по школе). Есть ли способ получить цвета только по школе, а затем по всем учащимся, связанным с этим цветом? Нужно ли создавать словарь для этого?
Любая помощь будет оценена.
Спасибо!
Обновление:
Вот модели:
class School(models.Model):
name = models.CharField(max_length=256)
principal = models.CharField(max_length=256)
location = models.CharField(max_length=256)
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse("school_app:school_detail",kwargs={'pk':self.pk})
class Student(models.Model):
name = models.CharField(max_length=256)
color = models.CharField(max_length=256)
school = models.ForeignKey(School,related_name='students', on_delete="Protect")
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse("school_app:student_detail",kwargs={'pk':self.pk})
Второе обновление:
Я пытаюсь создать шаблон, который выглядит примерно так (не уверен, что лучший способ сделать это):
{% for color in colors %}
<ul>
<li>{{color}}
{% for student in color %}
<ul>
<li>{{student}}</li>
</ul>
{% endfor %}
</li>
</ul>
{% endfor %}