# 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.
Есть ли способ решить задачу проще?
Или может надо было отдельный контекст использовать и как-то в цикле в шаблоне его использовать?