Django 2 различных предметных поля модели - PullRequest
0 голосов
/ 30 августа 2018

Я пытаюсь получить список отдельных элементов в поле модуля и затем отобразить все элементы, связанные с этим полем.

Например, в системе школьной администрации есть школьный модуль и модель ученика. У каждого учащегося есть цвет, связанный с ним как поле «цвет». Я хочу создать страницу, на которой на странице перечислены все различные цвета в школе, а затем под каждым цветом список учащихся, принадлежащих к этому цвету.

Буду ли я писать эту функцию в представлениях?

Вот то, что я пока имею в 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 %}

1 Ответ

0 голосов
/ 31 августа 2018

Изменение

context['colors']=Student.objects.all(
       ).order_by('color').distinct('color')

до

context['colors']=self.student_set.all(
       ).order_by('color').distinct('color')
...