'How can i display count of each column in django

Display

I would like to count the number of students for each subjects but currently it only displays the number of students for one subject. it only counts the number of student for one subject but i would like to count the number of students in each subject

Added the models.py. Ps still new to django

views.py

class SubjectView(TemplateView):
    template_name='subjects.html'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        username=self.request.user.id

        #filter subject taught by lecturer
        classdets=ClassDetail.objects.all().filter(teacher=username).values_list('subject_id')
        print(classdets)

        #filters all subjects from the class details
        subj=Subject.objects.filter(id__in=classdets)
        print(subj)

        #counts number of students
        subjID=Subject.objects.values('id')
        num_student=ClassDetail.objects.filter(id__in=subjID).count
        print(num_student)

        context['subjects'] = subj
        context['no_students'] = num_student

        return context

template

{% extends "base.html" %}
{% load static %}
{% block title %}Subjects{% endblock title %}

{% block sidenavbar %}
{% include 'partials/sidenavbar.html' %}
{% endblock %}

{% block navbar %}
{% include 'partials/navbar.html' %}
{% endblock %}

{% block subject %}

<div class="container-fluid">
  <div class="col">
    <div class="card bg-transparent">
      <!-- Card header -->
      <div>
        <div class="card-header bg-transparent border-0">
          <h3 class="mb-0" style="text-transform: uppercase">Current Subjects</h3>
          {% comment %} <a href="{% url 'all-students'%}">View Students</a> {% endcomment %}
        </div>
      </div>
      <!-- Translucent table -->
      <div class="table-responsive">
        <table class="table align-items-center table-flush" id="datatable-buttons">
          <thead class="thead-light">
            <tr>
              <th>Subject Name</th>
              <th>Subject Code</th>
              <th>Number of Students</th>
              {% comment %} <th>Generate Attendance Code</th> {% endcomment %}
            </tr>
          </thead>
          {% if user.is_authenticated %}
            {% for subject in subjects %}
                <tbody class="list" style="text-transform: capitalize">
                    <tr>
                    <th scope="row">
                        <div class="media align-items-center">
                         <a href="#" class="avatar rounded-circle mr-3">
                          {% if subject.thumbnail %}
                            <img alt="Logo" src="{{subject.thumbnail.url}}" />
                          {% endif %}
                        </a>
                        <div class="media-body">
                            <span class="name mb-0 text-sm">{{subject}}</span>
                        </div>
                        </div>
                    </th>
                    <td class="budget">{{subject.code}}</td>
                    <td>
                        <div class="d-flex align-items-center">
                          <span class="completion mr-2">{{no_students}}</span>
                        </div>
                    </td>
                    <td>
                        {% comment %}
                        <div class="d-flex align-items-center">
                        <span class="completion mr-2">{{attendace_code}}</span>
                        </div>
                        {% endcomment %}
                    </td>
                    </tr>
                </tbody>
            {% endfor %}
          {% endif %}
        </table>
      </div>
    </div>
  </div>
</div>
{% endblock %}

models

def get_thumbnail(instance, filename):
    path = f"static/assets/img/custom/{filename}"
    return path

class Subject(models.Model):
    code=models.CharField(max_length=8,unique=True,default="")
    name=models.CharField(max_length=100,unique=True)
    thumbnail=models.ImageField(blank=True,null=True,upload_to=get_thumbnail)

    def __str__(self):
        return f'{self.name}'

    class Meta:
        unique_together = ('name', 'code')

class ClassDetail(models.Model):
    teacher=models.ForeignKey(UserProfile,on_delete=models.PROTECT)
    subject=models.ForeignKey(Subject, on_delete=models.PROTECT, default="")
    student=models.ManyToManyField(UserProfile,related_name="student")



    def __str__(self):
        return f'{self.subject}'

    class Meta:
        unique_together = ('teacher', 'subject')

userprofile

class UserProfile(AbstractUser):

    ROLE_LECTURER = 'lecturer'
    ROLE_STUDENT = 'student'
    ROLE_ADMIN = 'admin'

    ROLE_CHOICES = (
        (ROLE_LECTURER, _('Lecturer')),
        (ROLE_STUDENT, _('Student')),
        (ROLE_ADMIN, _('Admin')),
    )

    STATUS_ACTIVE = 'active'
    STATUS_INACTIVE = 'inactive'
    STATUS_SUSPENDED = 'suspended'
    STATUS_EXPIRED = 'expired'


    STATUS_CHOICES = (
        (STATUS_ACTIVE, _('Active')),
        (STATUS_INACTIVE, _('Inactive')),
        (STATUS_SUSPENDED, _('Suspended')),
        (STATUS_EXPIRED, _("Expired")),

    )

    username = models.CharField(max_length=11, unique=True, verbose_name="Relevant ID")
    status = models.CharField(_('status'), max_length=50, choices=STATUS_CHOICES, default=STATUS_ACTIVE)
    role = models.CharField(_('role'), max_length=50, choices=ROLE_CHOICES, default="")

    def __str__(self):
        return f'{self.username}  ({self.first_name})'

    USERNAME_FIELD = 'username'


Solution 1:[1]

num_student =subjID.classdetail_set.all().count()
print(num_student)

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Richie