183 lines
4.7 KiB
Python
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",),
|
|
# },
|
|
# ),
|
|
# )
|