from django.contrib import messages from . import models from .utils import extract_summary_from_pdf from django.contrib import admin from django.contrib.auth.admin import UserAdmin as BaseUserAdmin from django.contrib.auth.admin import GroupAdmin as BaseGroupAdmin from django.contrib.auth.models import User, Group from unfold.forms import AdminPasswordChangeForm, UserChangeForm, UserCreationForm from unfold.admin import ModelAdmin admin.site.unregister(User) admin.site.unregister(Group) @admin.register(User) class UserAdmin(BaseUserAdmin, ModelAdmin): form = UserChangeForm add_form = UserCreationForm change_password_form = AdminPasswordChangeForm @admin.register(Group) class GroupAdmin(BaseGroupAdmin, ModelAdmin): pass @admin.register(models.Job) class JobAdmin(ModelAdmin): list_display = ('title', 'is_published', 'posted_to_linkedin', 'created_at') list_filter = ('is_published', 'posted_to_linkedin') search_fields = ('title', 'description_en', 'description_ar') @admin.action(description="Parse selected resumes") def parse_resumes(modeladmin, request, queryset): for candidate in queryset: if candidate.resume: summary = extract_summary_from_pdf(candidate.resume.path) candidate.parsed_summary = str(summary) candidate.save() messages.success(request, f"Parsed {queryset.count()} resumes successfully.") @admin.register(models.Candidate) class CandidateAdmin(ModelAdmin): list_display = ('first_name','last_name','phone', 'email', 'job', 'applied', 'created_at') list_filter = ('applied', 'job') search_fields = ('name', 'email') # readonly_fields = ('parsed_summary',) actions = [parse_resumes] @admin.register(models.TrainingMaterial) class TrainingMaterialAdmin(ModelAdmin): list_display = ('title', 'created_by', 'created_at') search_fields = ('title', 'content')