from django.contrib import admin from django.utils.html import format_html from .models import DailyReport, ReportComment @admin.register(DailyReport) class DailyReportAdmin(admin.ModelAdmin): """日报管理""" list_display = ( 'id', 'user_info', 'report_date', 'work_summary_short', 'next_day_plan_short', 'is_draft', 'created_at' ) list_filter = ('is_draft', 'report_date', 'created_at') search_fields = ('user__username', 'user__first_name', 'user__last_name', 'work_summary', 'next_day_plan') date_hierarchy = 'report_date' ordering = ('-report_date', '-created_at') readonly_fields = ('created_at', 'updated_at') fieldsets = ( ('基本信息', { 'fields': ('user', 'report_date', 'is_draft') }), ('日报内容', { 'fields': ('work_summary', 'next_day_plan', 'difficulties', 'suggestions') }), ('时间信息', { 'fields': ('created_at', 'updated_at'), 'classes': ('collapse',) }), ) def user_info(self, obj): """显示用户信息""" return format_html( '{}
{} | {}', obj.user.username, obj.user.department or '未设置部门', obj.user.position or '未设置职位' ) user_info.short_description = '用户信息' def work_summary_short(self, obj): """工作总结简短显示""" return obj.work_summary[:50] + '...' if len(obj.work_summary) > 50 else obj.work_summary work_summary_short.short_description = '工作总结' def next_day_plan_short(self, obj): """明日计划简短显示""" return obj.next_day_plan[:50] + '...' if len(obj.next_day_plan) > 50 else obj.next_day_plan next_day_plan_short.short_description = '明日计划' def get_queryset(self, request): """优化查询""" return super().get_queryset(request).select_related('user') @admin.register(ReportComment) class ReportCommentAdmin(admin.ModelAdmin): """日报评论管理""" list_display = ('id', 'report_info', 'user', 'content_short', 'created_at') list_filter = ('created_at', 'user') search_fields = ('user__username', 'content', 'report__user__username') ordering = ('-created_at',) readonly_fields = ('created_at', 'updated_at') fieldsets = ( ('基本信息', { 'fields': ('report', 'user') }), ('评论内容', { 'fields': ('content',) }), ('时间信息', { 'fields': ('created_at', 'updated_at'), 'classes': ('collapse',) }), ) def report_info(self, obj): """显示日报信息""" return format_html( '{}
{}', f'{obj.report.user.username} - {obj.report.report_date}', obj.report.work_summary[:30] + '...' if len(obj.report.work_summary) > 30 else obj.report.work_summary ) report_info.short_description = '关联日报' def content_short(self, obj): """评论内容简短显示""" return obj.content[:50] + '...' if len(obj.content) > 50 else obj.content content_short.short_description = '评论内容' def get_queryset(self, request): """优化查询""" return super().get_queryset(request).select_related('user', 'report__user')