Files
Student-Management-System-I…/app/admin.py
T
2025-01-08 21:15:45 +05:45

183 lines
4.7 KiB
Python

from django.contrib import admin
from app.models import (
Teacher,
Student,
Staff,
Course,
AcademicYear,
Subject,
NewsEvent,
Attendance,
Result,
Library,
Marksheet,
SubjectMark,
)
# BaseUserAdmin to handle common behavior for BaseUser-based models
class BaseUserAdmin(admin.ModelAdmin):
exclude = ["user"]
def save_model(self, request, obj, form, change):
super().save_model(request, obj, form, change)
if obj.user:
obj.user.groups.set(obj.group.all())
obj.user.save()
@admin.register(Teacher)
class TeacherAdmin(BaseUserAdmin):
list_display = ("id", "first_name", "last_name", "email", "phone", "active_status")
search_fields = ("first_name", "last_name", "email", "phone")
list_filter = ("active_status", "gender", "group")
@admin.register(Student)
class StudentAdmin(BaseUserAdmin):
list_display = (
"id",
"first_name",
"last_name",
"father_name",
"mother_name",
"guardian_name",
"email",
"phone",
"course",
"academic_year",
"active_status",
)
search_fields = (
"first_name",
"last_name",
"father_name",
"mother_name",
"email",
"phone",
)
list_filter = ("active_status", "gender", "course", "academic_year")
@admin.register(Staff)
class StaffAdmin(BaseUserAdmin):
list_display = (
"id",
"first_name",
"last_name",
"email",
"phone",
"position",
"active_status",
)
search_fields = ("first_name", "last_name", "email", "phone")
list_filter = ("active_status", "position", "group")
@admin.register(Course)
class CourseAdmin(admin.ModelAdmin):
list_display = ("id", "name", "level", "course_type", "duration")
search_fields = ("name",)
list_filter = ("course_type",)
@admin.register(AcademicYear)
class AcademicYearAdmin(admin.ModelAdmin):
list_display = ("id", "year")
search_fields = ("year",)
@admin.register(Subject)
class SubjectAdmin(admin.ModelAdmin):
list_display = ("id", "name", "course", "semester_or_year_number")
search_fields = ("name", "course__name")
list_filter = ("course", "semester_or_year_number")
@admin.register(NewsEvent)
class NewsEventAdmin(admin.ModelAdmin):
list_display = ("id", "title", "summary", "type", "created_at")
search_fields = ("title", "summary")
list_filter = ("type", "created_at")
@admin.register(Attendance)
class AttendanceAdmin(admin.ModelAdmin):
list_display = ("id", "student", "subject", "date", "status")
@admin.register(Result)
class ResultAdmin(admin.ModelAdmin):
list_display = (
"student",
"subject",
"practical_marks",
"exam_marks",
"total_marks",
)
readonly_fields = ("total_marks",)
def save_model(self, request, obj, form, change):
obj.total_marks = obj.get_total()
super().save_model(request, obj, form, change)
@admin.register(Library)
class LibraryAdmin(admin.ModelAdmin):
list_display = ("book_name", "publication", "publication_year", "available")
class SubjectMarkInline(admin.TabularInline):
model = SubjectMark
extra = 1
fields = (
"subject",
"obtained_theory_marks",
"total_theory_marks",
"obtained_practical_marks",
"total_practical_marks",
"total_marks",
)
readonly_fields = ("total_marks",)
@admin.register(Marksheet)
class MarksheetAdmin(admin.ModelAdmin):
inlines = [SubjectMarkInline]
list_display = ["student", "course", "total_marks", "obtained_marks", "grade"]
readonly_fields = ["total_marks", "obtained_marks", "grade"]
# class SubjectMarkInline(admin.TabularInline):
# model = SubjectMark
# extra = 1
# fields = (
# "subject",
# "obtained_theory_marks",
# "total_theory_marks",
# "obtained_practical_marks",
# "total_practical_marks",
# "total_marks",
# )
# readonly_fields = ("total_marks",)
#
#
# @admin.register(Marksheet)
# class MarksheetAdmin(admin.ModelAdmin):
# list_display = ["student", "course", "total_marks", "obtained_marks", "grade"]
# list_filter = ["grade", "course"]
# search_fields = ["student__first_name", "student__last_name", "course__name"]
# readonly_fields = ["total_marks", "obtained_marks", "grade"]
# inlines = [SubjectMarkInline]
#
# fieldsets = (
# ("Student Information", {"fields": ("student", "course")}),
# (
# "Results",
# {
# "fields": ("total_marks", "obtained_marks", "grade"),
# "classes": ("collapse",),
# },
# ),
# )