1
0
forked from erp-dev/erp
Files
erpnew/api_v1/admin.py
2026-07-11 00:05:05 +08:00

257 lines
7.4 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from django.contrib import admin
from django.contrib.admin import action
from django import forms
from api_v1.models import (
UploadedFile,
AppVersion,
DataSync,
MDYPlateOrderStaging,
MDYPlateOrderStagingTiiaUploadFailure,
MDYPlateOrderStagingQiniuImageUploadAudit,
MDYPlateOrderStagingQiniuImageUploadState,
PrintingExternalSyncFailure,
ApiAuditLog,
)
from .tasks import backup_database
class AppVersionAdminForm(forms.ModelForm):
class Meta:
model = AppVersion
fields = '__all__'
def clean(self):
cleaned_data = super().clean()
if not cleaned_data.get('download_url') and not cleaned_data.get('package_file'):
raise forms.ValidationError('请填写下载地址或上传安装包文件。')
return cleaned_data
@admin.register(UploadedFile)
class UploadedFileAdmin(admin.ModelAdmin):
list_display = ['id', 'original_filename', 'owner', 'file_size', 'content_type', 'created_at', 'is_deleted']
list_filter = ['is_deleted', 'created_at', 'content_type']
search_fields = ['original_filename', 'owner__username']
readonly_fields = ['created_at', 'file_size', 'content_type']
date_hierarchy = 'created_at'
ordering = ['-created_at']
actions = ['backup_database']
def get_queryset(self, request):
# 在管理界面显示所有文件,包括已删除的
return super().get_queryset(request).select_related('owner')
@action(description='备份数据库')
def backup_database(self, request, queryset):
backup_database.delay()
@admin.register(AppVersion)
class AppVersionAdmin(admin.ModelAdmin):
form = AppVersionAdminForm
list_display = [
'id',
'version_display',
'is_current',
'force',
'publish_date',
'download_url',
'created_at',
]
list_filter = ['is_current', 'force', 'publish_date', 'created_at']
search_fields = ['download_url', 'message']
readonly_fields = ['created_at', 'updated_at']
date_hierarchy = 'created_at'
ordering = ['-is_current', '-created_at']
fields = [
'major',
'minor',
'build',
'download_url',
'package_file',
'force',
'publish_date',
'message',
'is_current',
'created_at',
'updated_at',
]
@admin.display(description='版本')
def version_display(self, obj):
return str(obj)
def get_form(self, request, obj=None, **kwargs):
form = super().get_form(request, obj, **kwargs)
field = form.base_fields.get('download_url')
if field:
field.required = False
field.help_text = '可填写已可下载的 APK URL如同时上传安装包以此 URL 优先。'
return form
@admin.register(DataSync)
class DataSyncAdmin(admin.ModelAdmin):
list_display = ['id', 'table_name', 'page_index', 'page_size', 'total_count', 'synced_rows', 'last_ctime', 'last_rowid', 'note']
list_filter = ['table_name', 'created_at']
search_fields = ['table_name', 'last_rowid', 'note']
readonly_fields = ['created_at', 'updated_at']
date_hierarchy = 'created_at'
ordering = ['-created_at']
@admin.register(MDYPlateOrderStaging)
class MDYPlateOrderStagingAdmin(admin.ModelAdmin):
list_display = ['id', 'mdy_rowid', 'ctime', 'utime', 'created_at', 'updated_at']
list_filter = ['created_at']
search_fields = ['mdy_rowid']
readonly_fields = ['created_at', 'updated_at']
date_hierarchy = 'created_at'
ordering = ['-created_at']
@admin.register(MDYPlateOrderStagingTiiaUploadFailure)
class MDYPlateOrderStagingTiiaUploadFailureAdmin(admin.ModelAdmin):
list_display = [
'id',
'run_date',
'mdy_rowid',
'staging_id',
'attempts',
'last_attempt_at',
'created_at',
]
list_filter = ['run_date', 'created_at']
search_fields = ['mdy_rowid', 'error']
readonly_fields = ['created_at', 'updated_at']
date_hierarchy = 'created_at'
ordering = ['-created_at']
@admin.register(MDYPlateOrderStagingQiniuImageUploadAudit)
class MDYPlateOrderStagingQiniuImageUploadAuditAdmin(admin.ModelAdmin):
list_display = [
'id',
'mdy_rowid',
'staging_id',
'attachment_index',
'original_host',
'status',
'attempts',
'uploaded_at',
'last_attempt_at',
'created_at',
]
list_filter = ['status', 'original_host', 'created_at', 'uploaded_at']
search_fields = ['mdy_rowid', 'original_url', 'qiniu_url', 'error']
readonly_fields = [
'staging',
'mdy_rowid',
'source',
'attachment_index',
'source_field',
'original_url',
'original_host',
'qiniu_key',
'qiniu_url',
'status',
'attempts',
'error',
'file_size',
'content_type',
'raw_attachment',
'started_at',
'uploaded_at',
'last_attempt_at',
'created_at',
'updated_at',
]
date_hierarchy = 'created_at'
ordering = ['-created_at']
def has_add_permission(self, request):
return False
@admin.register(MDYPlateOrderStagingQiniuImageUploadState)
class MDYPlateOrderStagingQiniuImageUploadStateAdmin(admin.ModelAdmin):
list_display = [
'id',
'name',
'last_staging_id',
'staging_finished',
'scanned_staging_rows',
'discovered_image_items',
'created_audit_rows',
'existing_audit_rows',
'last_heartbeat_at',
'updated_at',
]
readonly_fields = [
'name',
'last_staging_id',
'staging_finished',
'scanned_staging_rows',
'discovered_image_items',
'created_audit_rows',
'existing_audit_rows',
'last_heartbeat_at',
'created_at',
'updated_at',
]
ordering = ['name']
def has_add_permission(self, request):
return False
@admin.register(PrintingExternalSyncFailure)
class PrintingExternalSyncFailureAdmin(admin.ModelAdmin):
list_display = [
'id',
'run_date',
'external_record_id',
'external_order_id',
'product_name',
'attempts',
'last_attempt_at',
'created_at',
]
list_filter = ['run_date', 'created_at']
search_fields = ['external_record_id', 'external_order_id', 'product_name', 'error']
readonly_fields = [
'run_date',
'external_record_id',
'external_order_id',
'product_name',
'error',
'raw',
'attempts',
'last_attempt_at',
'created_at',
'updated_at',
]
date_hierarchy = 'created_at'
ordering = ['-created_at']
def has_add_permission(self, request):
return False
@admin.register(ApiAuditLog)
class ApiAuditLogAdmin(admin.ModelAdmin):
"""API审计日志管理"""
list_display = ['id', 'method', 'url', 'username', 'user_id', 'response_status', 'created_at']
list_filter = ['method', 'response_status', 'created_at']
search_fields = ['url', 'username']
readonly_fields = ['url', 'method', 'request_data', 'query_params', 'user_id', 'username', 'response_status', 'created_at']
date_hierarchy = 'created_at'
ordering = ['-created_at']
# 禁止添加和修改,只允许查看和删除
def has_add_permission(self, request):
return False
def has_change_permission(self, request, obj=None):
return False