Найти - Пользователи
Полная версия: вывести список групп с количеством студентов
Начало » Django » вывести список групп с количеством студентов
1
ajib6ept
Делаю тестовую задача, там необходимо вывести список групп и количество студентов в них

# 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.
Есть ли способ решить задачу проще?

Или может надо было отдельный контекст использовать и как-то в цикле в шаблоне его использовать?
inoks
>вывести список групп и количество студентов в них

{% for group in groups %}
 В группе {{ group }} {{ group.students_set.all.count }} студентов. <br />
{% endfor %}
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB