This commit is contained in:
@@ -120,7 +120,7 @@ class OrderableAdminMixin:
|
||||
|
||||
@admin.register(Activity)
|
||||
class ActivityAdmin(ModelAdmin):
|
||||
list_display = ('title', 'author', 'banner_display', 'start_time', 'location', 'signup_count', 'is_visible', 'is_active', 'auto_confirm', 'created_at')
|
||||
list_display = ('title', 'author_info_display', 'banner_display', 'start_time', 'location', 'signup_count', 'is_visible', 'is_active', 'auto_confirm', 'created_at')
|
||||
list_filter = ('is_visible', 'is_active', 'auto_confirm', 'start_time')
|
||||
search_fields = ('title', 'location', 'author__phone_number')
|
||||
# autocomplete_fields = ['author'] # 暂时注释,避免环境不一致导致报错
|
||||
@@ -141,6 +141,14 @@ class ActivityAdmin(ModelAdmin):
|
||||
}),
|
||||
)
|
||||
|
||||
@display(description="发布者 (手机号/昵称)")
|
||||
def author_info_display(self, obj):
|
||||
if not obj.author:
|
||||
return "-"
|
||||
phone = obj.author.phone_number or "无手机号"
|
||||
nickname = obj.author.nickname or "无昵称"
|
||||
return f"{phone} ({nickname})"
|
||||
|
||||
@display(description="Banner")
|
||||
def banner_display(self, obj):
|
||||
if obj.banner:
|
||||
@@ -155,7 +163,7 @@ class ActivityAdmin(ModelAdmin):
|
||||
|
||||
@admin.register(ActivitySignup)
|
||||
class ActivitySignupAdmin(ModelAdmin):
|
||||
list_display = ('activity', 'user', 'signup_time', 'status_label', 'order_link')
|
||||
list_display = ('activity', 'user_info_display', 'signup_time', 'status_label', 'order_link')
|
||||
list_filter = ('status', 'signup_time', 'activity')
|
||||
search_fields = ('user__nickname', 'user__phone_number', 'activity__title')
|
||||
autocomplete_fields = ['activity', 'user']
|
||||
@@ -172,6 +180,12 @@ class ActivitySignupAdmin(ModelAdmin):
|
||||
)
|
||||
readonly_fields = ('signup_time', 'signup_info_display')
|
||||
|
||||
@display(description="报名用户 (手机号/昵称)")
|
||||
def user_info_display(self, obj):
|
||||
phone = obj.user.phone_number or "无手机号"
|
||||
nickname = obj.user.nickname or "无昵称"
|
||||
return f"{phone} ({nickname})"
|
||||
|
||||
@display(description="报名信息")
|
||||
def signup_info_display(self, obj):
|
||||
import json
|
||||
@@ -209,7 +223,7 @@ class ActivitySignupAdmin(ModelAdmin):
|
||||
|
||||
@admin.register(Topic)
|
||||
class TopicAdmin(OrderableAdminMixin, ModelAdmin):
|
||||
list_display = ('title', 'status', 'category', 'author', 'get_related_item', 'reply_count', 'view_count', 'is_pinned', 'created_at', 'order_actions')
|
||||
list_display = ('title', 'status', 'category', 'author_info_display', 'get_related_item', 'reply_count', 'view_count', 'is_pinned', 'created_at', 'order_actions')
|
||||
list_filter = ('status', 'category', 'is_pinned', 'created_at', 'related_product', 'related_service', 'related_course')
|
||||
search_fields = ('title', 'content', 'author__nickname', 'author__phone_number')
|
||||
autocomplete_fields = ['author', 'related_product', 'related_service', 'related_course']
|
||||
@@ -218,6 +232,14 @@ class TopicAdmin(OrderableAdminMixin, ModelAdmin):
|
||||
actions = ['reset_ordering', 'approve_topics', 'reject_topics']
|
||||
list_editable = ('status', 'is_pinned', 'view_count')
|
||||
|
||||
@display(description="作者 (手机号/昵称)")
|
||||
def author_info_display(self, obj):
|
||||
if not obj.author:
|
||||
return "-"
|
||||
phone = obj.author.phone_number or "无手机号"
|
||||
nickname = obj.author.nickname or "无昵称"
|
||||
return f"{phone} ({nickname})"
|
||||
|
||||
@admin.action(description="批量通过审核")
|
||||
def approve_topics(self, request, queryset):
|
||||
rows_updated = queryset.update(status='published')
|
||||
@@ -277,7 +299,7 @@ class TopicAdmin(OrderableAdminMixin, ModelAdmin):
|
||||
|
||||
@admin.register(Reply)
|
||||
class ReplyAdmin(ModelAdmin):
|
||||
list_display = ('short_content', 'topic', 'author', 'is_pinned', 'like_count', 'created_at')
|
||||
list_display = ('short_content', 'topic', 'author_info_display', 'is_pinned', 'like_count', 'created_at')
|
||||
list_filter = ('is_pinned', 'created_at')
|
||||
search_fields = ('content', 'author__nickname', 'author__phone_number', 'topic__title')
|
||||
autocomplete_fields = ['author', 'topic', 'reply_to']
|
||||
@@ -295,6 +317,14 @@ class ReplyAdmin(ModelAdmin):
|
||||
)
|
||||
readonly_fields = ('created_at',)
|
||||
|
||||
@display(description="回复者 (手机号/昵称)")
|
||||
def author_info_display(self, obj):
|
||||
if not obj.author:
|
||||
return "-"
|
||||
phone = obj.author.phone_number or "无手机号"
|
||||
nickname = obj.author.nickname or "无昵称"
|
||||
return f"{phone} ({nickname})"
|
||||
|
||||
@display(description="点赞数")
|
||||
def like_count(self, obj):
|
||||
return obj.likes.count()
|
||||
|
||||
Reference in New Issue
Block a user