vbv/server/vbv_lernwelt/assignment/admin.py

105 lines
2.9 KiB
Python

from django.contrib import admin
from django.db.models import JSONField
from vbv_lernwelt.assignment.models import (
AssignmentCompletion,
AssignmentCompletionAuditLog,
)
from vbv_lernwelt.core.admin import LogAdmin
from vbv_lernwelt.core.admin_utils import PrettyJSONWidget
@admin.register(AssignmentCompletion)
class AssignmentCompletionAdmin(admin.ModelAdmin):
formfield_overrides = {
JSONField: {"widget": PrettyJSONWidget(attrs={"rows": 16, "cols": 80})},
}
date_hierarchy = "created_at"
list_display = [
"id",
"assignment",
"get_circle",
"assignment_user",
"evaluation_user",
"course_session",
"completion_status",
"evaluation_points",
"evaluation_points_deducted",
]
list_filter = [
"completion_status",
"assignment__assignment_type",
"course_session__course",
"course_session",
]
search_fields = [
"assignment_user__email",
"assignment_user__first_name",
"assignment_user__last_name",
"evaluation_user__email",
"evaluation_user__first_name",
"evaluation_user__last_name",
]
readonly_fields = [
"assignment_user",
"assignment",
"completion_data",
"course_session",
"learning_content_page",
"evaluation_points",
"submitted_at",
"evaluation_user",
"evaluation_submitted_at",
"evaluation_points_deducted_user",
]
def get_circle(self, obj):
try:
return obj.learning_content_page.specific.get_circle().title
except Exception:
return ""
get_circle.short_description = "Circle"
def save_model(self, request, obj, form, change):
if change and "evaluation_points_deducted" in form.changed_data:
obj.evaluation_points_deducted_user = request.user
super().save_model(request, obj, form, change)
@admin.register(AssignmentCompletionAuditLog)
class AssignmentCompletionAuditLogAdmin(LogAdmin):
date_hierarchy = "created_at"
list_display = [
"created_at",
"assignment",
"get_circle",
"assignment_user",
"evaluation_user",
"course_session",
"completion_status",
"evaluation_points",
]
list_filter = [
"completion_status",
"assignment__assignment_type",
"course_session__course",
"course_session",
]
search_fields = [
"assignment_user__email",
"assignment_user__first_name",
"assignment_user__last_name",
"evaluation_user__email",
"evaluation_user__first_name",
"evaluation_user__last_name",
]
def get_circle(self, obj):
try:
return obj.learning_content_page.specific.get_circle().title
except Exception:
return ""
get_circle.short_description = "Circle"