This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
from django.contrib import admin
|
||||
from unfold.admin import ModelAdmin
|
||||
from unfold.decorators import display
|
||||
from .models import Competition, CompetitionEnrollment, ScoreDimension, Project, ProjectFile, Score, Comment
|
||||
from .models import Competition, CompetitionEnrollment, ScoreDimension, Project, ProjectFile, Score, Comment, ScoreFormula
|
||||
|
||||
class ScoreDimensionInline(admin.TabularInline):
|
||||
model = ScoreDimension
|
||||
@@ -143,3 +143,60 @@ class CommentAdmin(ModelAdmin):
|
||||
def content_preview(self, obj):
|
||||
return obj.content[:50] + '...' if len(obj.content) > 50 else obj.content
|
||||
content_preview.short_description = "评语内容"
|
||||
|
||||
|
||||
class ScoreFormulaAdmin(ModelAdmin):
|
||||
"""
|
||||
评分公式管理
|
||||
提供可视化公式编辑功能
|
||||
"""
|
||||
list_display = ['name', 'competition', 'formula_preview_display', 'is_active', 'is_default', 'created_at']
|
||||
list_filter = ['competition', 'is_active', 'is_default']
|
||||
search_fields = ['name', 'description', 'formula', 'competition__title']
|
||||
autocomplete_fields = ['competition']
|
||||
|
||||
fieldsets = (
|
||||
('基本信息', {
|
||||
'fields': ('competition', 'name', 'description')
|
||||
}),
|
||||
('公式配置', {
|
||||
'fields': ('formula',),
|
||||
'description': '使用维度名称作为变量,例如: 创新性 * 0.3 + 实用性 * 0.5 + 演示效果 * 0.2'
|
||||
}),
|
||||
('公式设置', {
|
||||
'fields': ('is_active', 'is_default')
|
||||
}),
|
||||
)
|
||||
|
||||
@display(description="公式预览")
|
||||
def formula_preview_display(self, obj):
|
||||
preview = obj.get_formula_preview()
|
||||
return preview[:100] + '...' if len(preview) > 100 else preview if preview else '-'
|
||||
|
||||
def get_form_kwargs(self, request, *args, **kwargs):
|
||||
kwargs = super().get_form_kwargs(request, *args, **kwargs)
|
||||
return kwargs
|
||||
|
||||
def changeform_view(self, request, object_id=None, form_url='', extra_context=None):
|
||||
extra_context = extra_context or {}
|
||||
|
||||
if request.method == 'GET' and not object_id:
|
||||
competition_id = request.GET.get('competition')
|
||||
if competition_id:
|
||||
try:
|
||||
from .models import ScoreDimension
|
||||
dimensions = ScoreDimension.objects.filter(competition_id=competition_id)
|
||||
extra_context['dimensions'] = dimensions
|
||||
except:
|
||||
pass
|
||||
|
||||
return super().changeform_view(request, object_id, form_url, extra_context)
|
||||
|
||||
class Media:
|
||||
css = {
|
||||
'all': ('competition/admin/css/formula-editor.css',)
|
||||
}
|
||||
js = ('competition/admin/js/formula-editor.js',)
|
||||
|
||||
|
||||
admin.site.register(ScoreFormula, ScoreFormulaAdmin)
|
||||
|
||||
Reference in New Issue
Block a user