2025-05-19 18:23:59 +08:00
|
|
|
from django.contrib import admin
|
2025-05-23 19:08:40 +08:00
|
|
|
from django.utils.html import format_html
|
|
|
|
from django.utils.safestring import mark_safe
|
|
|
|
from .models import CreatorProfile
|
2025-05-19 18:23:59 +08:00
|
|
|
|
|
|
|
# Register your models here.
|
2025-05-23 19:08:40 +08:00
|
|
|
|
|
|
|
@admin.register(CreatorProfile)
|
|
|
|
class CreatorProfileAdmin(admin.ModelAdmin):
|
|
|
|
list_display = (
|
|
|
|
'avatar_thumbnail', 'name', 'category', 'e_commerce_level', 'exposure_level',
|
|
|
|
'followers', 'gmv', 'items_sold', 'avg_video_views', 'pricing', 'collab_count',
|
|
|
|
'mcn', 'location', 'create_time'
|
|
|
|
)
|
|
|
|
list_filter = (
|
|
|
|
'category', 'e_commerce_level', 'exposure_level', 'mcn', 'location',
|
|
|
|
'e_commerce_platforms', 'create_time', 'update_time'
|
|
|
|
)
|
|
|
|
search_fields = (
|
|
|
|
'name', 'email', 'instagram', 'tiktok_link', 'location', 'mcn',
|
|
|
|
'latest_collab', 'live_schedule', 'pricing_package'
|
|
|
|
)
|
|
|
|
readonly_fields = ('create_time', 'update_time', 'avatar_preview')
|
|
|
|
|
|
|
|
def avatar_thumbnail(self, obj):
|
|
|
|
"""在列表中显示头像缩略图"""
|
|
|
|
avatar_url = obj.get_avatar_url()
|
|
|
|
if avatar_url:
|
|
|
|
return format_html('<img src="{}" width="40" height="40" style="border-radius: 50%; object-fit: cover;" />', avatar_url)
|
|
|
|
return "无头像"
|
|
|
|
avatar_thumbnail.short_description = "头像"
|
|
|
|
|
|
|
|
def avatar_preview(self, obj):
|
|
|
|
"""在详情页显示头像预览"""
|
|
|
|
avatar_url = obj.get_avatar_url()
|
|
|
|
if avatar_url:
|
|
|
|
return format_html('<img src="{}" width="150" height="150" style="border-radius: 10px; object-fit: cover;" />', avatar_url)
|
|
|
|
return "无头像"
|
|
|
|
avatar_preview.short_description = "头像预览"
|
|
|
|
|
|
|
|
fieldsets = (
|
|
|
|
('基本信息', {
|
|
|
|
'fields': ('name', 'avatar', 'avatar_url', 'avatar_preview')
|
|
|
|
}),
|
|
|
|
('联系方式', {
|
|
|
|
'fields': ('email', 'instagram', 'tiktok_link', 'location', 'live_schedule')
|
|
|
|
}),
|
|
|
|
('分类等级', {
|
|
|
|
'fields': ('category', 'e_commerce_level', 'exposure_level')
|
|
|
|
}),
|
|
|
|
('数据指标', {
|
|
|
|
'fields': ('followers', 'gmv', 'items_sold', 'avg_video_views')
|
|
|
|
}),
|
|
|
|
('定价信息', {
|
|
|
|
'fields': ('pricing', 'pricing_package')
|
|
|
|
}),
|
|
|
|
('合作信息', {
|
|
|
|
'fields': ('collab_count', 'latest_collab', 'mcn')
|
|
|
|
}),
|
|
|
|
('电商平台', {
|
|
|
|
'fields': ('e_commerce_platforms',)
|
|
|
|
}),
|
|
|
|
('分析数据', {
|
|
|
|
'fields': ('gmv_by_channel', 'gmv_by_category'),
|
|
|
|
'classes': ('collapse',)
|
|
|
|
}),
|
|
|
|
('时间信息', {
|
|
|
|
'fields': ('create_time', 'update_time'),
|
|
|
|
'classes': ('collapse',)
|
|
|
|
}),
|
|
|
|
)
|
|
|
|
|
|
|
|
list_per_page = 20
|
|
|
|
ordering = ('-create_time',)
|
|
|
|
|
|
|
|
# 添加批量操作
|
|
|
|
actions = ['export_selected_creators']
|
|
|
|
|
|
|
|
def export_selected_creators(self, request, queryset):
|
|
|
|
"""批量导出选中的达人信息"""
|
|
|
|
# 这里可以添加导出逻辑
|
|
|
|
self.message_user(request, f"已选择 {queryset.count()} 个达人进行导出")
|
|
|
|
export_selected_creators.short_description = "导出选中的达人信息"
|