Django,我如何计算每个小组有多少学生?

问题描述 投票:1回答:1

我无法过滤我的模型,例如我需要在结果中显示,请帮助,谢谢

  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 %}
python django django-filter
1个回答
0
投票

您可以用学生人数注释Group

from django.db.models import Count

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

然后在模板中,您可以访问此查询集产生的.nstudGroup属性:

{% for i in groups %}
 <tr>
    <td>{{ i.datepublished }}</td>
    <td>{{ i.title }}</td>
    <td>{{ i.nstud }}</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 %}
© www.soinside.com 2019 - 2024. All rights reserved.