Django, как мне посчитать сколько учеников в каждой группе? - PullRequest
0 голосов
/ 08 марта 2020

я не могу отфильтровать свои модели, например, мне нужно показать результат, пожалуйста, помогите, спасибо

  1. дата группы 110 студентов 23
  2. дата группы 111 студентов 9

модели

class Group(models.Model):
    title     = models.CharField(max_length=200, default=0)
    date_pub  = models.DateTimeField(auto_now_add=True)
    completed = models.BooleanField(default=False)

    def __str__(self):
        return self.title

    def datepublished(self):
        return self.date_pub.strftime('%d.%m.%Y')

class Student(models.Model):
    user      = models.OneToOneField(User, on_delete=models.CASCADE)
    group     = models.ForeignKey(Group,on_delete=models.CASCADE,default=0)
    rating    = models.CharField(default='5', max_length=200)
    date_pub  = models.DateTimeField(auto_now_add=True)
    completed = models.BooleanField(default=False)

    def __str__(self):
        return self.user.username

просмотров

def groups(request):
    groups = Group.objects.all()
    context = {
        'groups': groups
    }
    return render(request, 'panel/panel_groups.html', context)

html

{% for i in groups %}
                <tr>
                  <td>{{ i.datepublished }}</td>
                  <td>{{ i.title }}</td>
                  <td>count</td>
                  <td>
                    <a href="{% url 'groups_detail'  i.id %}" class="btn btn-secondary">
                      <i class="fas fa-angle-double-right"></i> Details
                    </a>
                  </td>
                </tr>
              {% endfor %}

1 Ответ

1 голос
/ 08 марта 2020

Вы можете аннотировать Group с количеством учеников:

from django.db.models import <b>Count</b>

def groups(request):
    groups = Group.objects.annotate(<b>nstud=Count('student')</b>)
    context = {
        'groups': groups
    }
    return render(request, 'panel/panel_groups.html', context)

В шаблоне вы можете получить доступ к атрибуту .nstud Group s, которые возникают из этого набора запросов. :

{% for i in groups %}
 <tr>
    <td>{{ i.datepublished }}</td>
    <td>{{ i.title }}</td>
    <td>{{ <b>i.nstud</b> }}</td>
    <td>
      <a href="{% url 'groups_detail' i.id %}" class="btn btn-secondary">
        <i class="fas fa-angle-double-right"></i> Details
      </a>
    </td>
  </tr>
{% endfor %}
...