Files
cmhub/apps/portal/admin.py
T

141 lines
3.4 KiB
Python

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]}..."