Merge pull request #19 from benaissazaki/add-students-gender
Add students gender
This commit is contained in:
commit
5a1b34d763
1
TODO.md
1
TODO.md
@ -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:
|
||||
|
||||
@ -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")
|
||||
|
||||
18
accounts/migrations/0019_user_gender.py
Normal file
18
accounts/migrations/0019_user_gender.py
Normal 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),
|
||||
),
|
||||
]
|
||||
@ -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})
|
||||
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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 }}
|
||||
|
||||
@ -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)'
|
||||
|
||||
@ -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 }}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user