Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » вывести список групп с количеством студентов [RSS Feed]

#1 Окт. 9, 2014 05:40:24

ajib6ept
От: От: От: От: От: От: От: От:
Зарегистрирован: 2013-08-04
Сообщения: 297
Репутация: +  26  -
Профиль   Отправить e-mail  

вывести список групп с количеством студентов

Делаю тестовую задача, там необходимо вывести список групп и количество студентов в них

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

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



_________________________
Python golden rule: Do not PEP 8 unto others; only PEP 8 thy self.
Don't let PEP 8 make you insanely intolerant of other people's code.

Отредактировано ajib6ept (Окт. 9, 2014 05:42:10)

Офлайн

#2 Окт. 9, 2014 17:27:08

inoks
От: Russia
Зарегистрирован: 2012-12-11
Сообщения: 343
Репутация: +  35  -
Профиль   Адрес электронной почты  

вывести список групп с количеством студентов

>вывести список групп и количество студентов в них

{% for group in groups %}
 В группе {{ group }} {{ group.students_set.all.count }} студентов. <br />
{% endfor %}

Отредактировано inoks (Окт. 9, 2014 17:27:34)

Офлайн

  • Начало
  • » Django
  • » вывести список групп с количеством студентов[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version