Merge pull request #19 from benaissazaki/add-students-gender

Add students gender
This commit is contained in:
Adil Mohak 2024-02-02 09:41:38 +03:00 committed by GitHub
commit 5a1b34d763
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 50 additions and 4 deletions

View File

@ -10,7 +10,6 @@
- **Integrate the dashboard with dynamic/live data**:
- Overall attendance
- School demographics
- Gender
- Lecturer qualification
- Students' level
- Students average grade per course:

View File

@ -6,7 +6,7 @@ from django.contrib.auth.forms import (
)
from django.contrib.auth.forms import PasswordResetForm
from course.models import Program
from .models import User, Student, Parent, RELATION_SHIP, LEVEL
from .models import User, Student, Parent, RELATION_SHIP, LEVEL, GENDERS
class StaffAddForm(UserCreationForm):
@ -167,6 +167,15 @@ class StudentAddForm(UserCreationForm):
label="Last name",
)
gender = forms.CharField(
widget=forms.Select(
choices=GENDERS,
attrs={
"class": "browser-default custom-select form-control",
},
),
)
level = forms.CharField(
widget=forms.Select(
choices=LEVEL,
@ -230,6 +239,7 @@ class StudentAddForm(UserCreationForm):
user.is_student = True
user.first_name = self.cleaned_data.get("first_name")
user.last_name = self.cleaned_data.get("last_name")
user.gender = self.cleaned_data.get("gender")
user.address = self.cleaned_data.get("address")
user.phone = self.cleaned_data.get("phone")
user.email = self.cleaned_data.get("email")

View File

@ -0,0 +1,18 @@
# Generated by Django 4.0.8 on 2024-01-31 21:17
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('accounts', '0018_rename_department_student_program'),
]
operations = [
migrations.AddField(
model_name='user',
name='gender',
field=models.CharField(blank=True, choices=[('M', 'Male'), ('F', 'Female')], max_length=1, null=True),
),
]

View File

@ -55,11 +55,15 @@ class CustomUserManager(UserManager):
return queryset
GENDERS = (("M", "Male"), ("F", "Female"))
class User(AbstractUser):
is_student = models.BooleanField(default=False)
is_lecturer = models.BooleanField(default=False)
is_parent = models.BooleanField(default=False)
is_dep_head = models.BooleanField(default=False)
gender = models.CharField(max_length=1, choices=GENDERS, blank=True, null=True)
phone = models.CharField(max_length=60, blank=True, null=True)
address = models.CharField(max_length=60, blank=True, null=True)
picture = models.ImageField(
@ -161,6 +165,13 @@ class Student(models.Model):
def __str__(self):
return self.student.get_full_name
@classmethod
def get_gender_count(cls):
males_count = Student.objects.filter(student__gender="M").count()
females_count = Student.objects.filter(student__gender="F").count()
return {"M": males_count, "F": females_count}
def get_absolute_url(self):
return reverse("profile_single", kwargs={"id": self.id})

View File

@ -4,7 +4,7 @@ from django.contrib.auth.decorators import login_required
from django.conf import settings
from accounts.decorators import admin_required, lecturer_required
from accounts.models import User
from accounts.models import User, Student
from .forms import SessionForm, SemesterForm, NewsAndEventsForm
from .models import *
@ -26,10 +26,13 @@ def home_view(request):
@admin_required
def dashboard_view(request):
logs = ActivityLog.objects.all().order_by("-created_at")[:10]
gender_count = Student.get_gender_count()
context = {
"student_count": User.get_student_count(),
"lecturer_count": User.get_lecturer_count(),
"superuser_count": User.get_superuser_count(),
"males_count": gender_count["M"],
"females_count": gender_count["F"],
"logs": logs,
}
return render(request, "core/dashboard.html", context)

View File

@ -36,6 +36,7 @@
<div class="card-body">
{{ form.first_name|as_crispy_field }}
{{ form.last_name|as_crispy_field }}
{{ form.gender|as_crispy_field }}
{{ form.email|as_crispy_field }}
{{ form.address|as_crispy_field }}
{{ form.phone|as_crispy_field }}

View File

@ -478,7 +478,7 @@
],
datasets: [{
label: "Students Gender Dataset",
data: [56, 44],
data: [{{ males_count }}, {{ females_count }}],
backgroundColor: [
'rgb(255, 99, 132)',
'rgb(54, 162, 235)'

View File

@ -53,6 +53,10 @@
<label for="last_name_id" class="form-label">{{ form.last_name.label }}</label>
{{ form.last_name }}
</div>
<div class="mb-3">
<label for="gender_id" class="form-label">{{ form.gender.label }}</label>
{{ form.gender }}
</div>
<div class="mb-3">
<label for="level_id" class="form-label">{{ form.level.label }}</label>
{{ form.level }}