from django import forms from django.contrib import admin from .models import DownloadRelease, ImportTemplate class DownloadReleaseAdminForm(forms.ModelForm): class Meta: model = DownloadRelease fields = "__all__" def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fields["sha256"].required = True self.fields["size_bytes"].required = True @admin.register(DownloadRelease) class DownloadReleaseAdmin(admin.ModelAdmin): form = DownloadReleaseAdminForm list_display = ( "platform", "version", "is_current", "force_update", "download_source", "size_bytes", "sha256_short", "updated_at", ) list_filter = ("platform", "is_current", "force_update") search_fields = ("version", "sha256", "external_url", "file") readonly_fields = ("created_at", "updated_at") fieldsets = ( ( "版本信息", { "fields": ( "platform", "version", "is_current", "force_update", "release_notes", ) }, ), ( "下载配置", { "fields": ( "file", "external_url", "size_bytes", "sha256", ) }, ), ( "时间", { "fields": ( "created_at", "updated_at", ) }, ), ) @admin.display(description="下载来源") def download_source(self, obj): if obj.external_url: return "外部链接" if obj.file: return "本地文件" return "未配置" @admin.display(description="SHA256") def sha256_short(self, obj): if not obj.sha256: return "-" return f"{obj.sha256[:12]}..." @admin.register(ImportTemplate) class ImportTemplateAdmin(admin.ModelAdmin): list_display = ( "name", "is_current", "download_source", "sha256_short", "updated_at", ) list_filter = ("is_current",) search_fields = ("name", "sha256", "external_url", "file", "notes") readonly_fields = ("created_at", "updated_at") fieldsets = ( ( "模板信息", { "fields": ( "name", "is_current", "notes", ) }, ), ( "下载配置", { "fields": ( "file", "external_url", "sha256", ) }, ), ( "时间", { "fields": ( "created_at", "updated_at", ) }, ), ) @admin.display(description="下载来源") def download_source(self, obj): if obj.external_url: return "外部链接" if obj.file: return "本地文件" return "未配置" @admin.display(description="SHA256") def sha256_short(self, obj): if not obj.sha256: return "-" return f"{obj.sha256[:12]}..."