You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
1.7 KiB
45 lines
1.7 KiB
from django.contrib import admin
|
|
from django.utils.translation import gettext_lazy as _
|
|
from django.utils.html import format_html
|
|
|
|
from unfold.admin import ModelAdmin
|
|
from unfold.decorators import display
|
|
|
|
from apps.certificate.models import Certificate
|
|
|
|
from utils.admin import project_admin_site
|
|
from apps.course.admin.professor_base import CertificateBaseAdmin
|
|
|
|
@admin.register(Certificate)
|
|
class CertificateAdmin(CertificateBaseAdmin):
|
|
list_display = ['student', 'course', 'certificate_status', 'created_at']
|
|
list_filter = ['status', 'created_at']
|
|
search_fields = ['id', 'student__username', 'student__email', 'course__title']
|
|
readonly_fields = ['created_at', 'updated_at']
|
|
autocomplete_fields = ['student',]
|
|
fieldsets = (
|
|
(None, {
|
|
'fields': ('student', 'course', 'status', 'certificate_file')
|
|
}),
|
|
(_('Timestamps'), {
|
|
'fields': ('created_at', 'updated_at'),
|
|
'classes': ('collapse',)
|
|
}),
|
|
)
|
|
|
|
@display(description=_("Status"), ordering="status")
|
|
def certificate_status(self, obj):
|
|
status_classes = {
|
|
'pending': 'unfold-badge unfold-badge--warning',
|
|
'approved': 'unfold-badge unfold-badge--success',
|
|
'rejected': 'unfold-badge unfold-badge--danger',
|
|
'issued': 'unfold-badge unfold-badge--info',
|
|
}
|
|
|
|
status_class = status_classes.get(obj.status.lower(), 'unfold-badge')
|
|
return format_html('<span class="{}">{}</span>', status_class, obj.get_status_display())
|
|
|
|
def get_queryset(self, request):
|
|
queryset = super().get_queryset(request)
|
|
return queryset
|
|
project_admin_site.register(Certificate, CertificateAdmin)
|