# coding: utf-8 from django.db import models class Students(models.Model): st_surname = models.CharField(verbose_name=u'Фамилия', max_length=30) st_name = models.CharField(verbose_name=u'Имя', max_length=30) st_patronymic = models.CharField(verbose_name=u'Отчество', max_length=30) st_birthday = models.DateField(verbose_name=u'Дата рождения') st_number = models.IntegerField(verbose_name=u'Номер билета') st_group = models.ForeignKey('Group', verbose_name=u'Группа', blank=True, null=True) def __unicode__ (self): return '%s %s. %s.' % (self.st_surname, self.st_name[:1], self.st_patronymic[:1]) class Meta: verbose_name = u'Студент' verbose_name_plural = u'Студенты' class Group(models.Model): gr_name = models.CharField(verbose_name=u'Название', max_length=30) gr_elder = models.ForeignKey('Students', verbose_name=u'Староста') def __unicode__(self): return self.gr_name class Meta: verbose_name = u'Группа' verbose_name_plural = u'Группы'
from django.shortcuts import render from django.http import HttpResponse from django.views import generic from django.db.models import Count from models import Group, Students class ListGroup(generic.ListView): model = Group context_object_name = 'groups' template_name = 'stud/list_group.html' def get_context_data(self, **kwargs): context = super(ListGroup, self).get_context_data(**kwargs) context['groups'] = zip(context['groups'], Group.objects.annotate(num_st = Count('students'))) return context
{% extends 'stud/base.html' %} {% block headline %}Список групп{% endblock %} {% block content %} <center> {% if groups %} <table border=1> <tr> <td><b>№</b></td> <td><b>Название</b></td> <td><b>Численность</b></td> <td><b>Староста</b></td> </tr> {% for group, st in groups %} <tr> <td>{{ forloop.counter }}</td> <td><a href="/group/{{ group.id }}/">{{ group.gr_name }}</a></td> <td>{{ st.num_st }}</td> <td>{{ group.gr_elder }}</td> </tr> {% endfor %} </table> {% else %} Ничего не найдено {% endif %} </center> {% endblock %}
Я через get_context_data объеденил два списка: переопределил context_object_name.
Есть ли способ решить задачу проще?
Или может надо было отдельный контекст использовать и как-то в цикле в шаблоне его использовать?