admin phone serch
All checks were successful
Deploy to Server / deploy (push) Successful in 1m53s

This commit is contained in:
jeremygan2021
2026-03-17 19:21:32 +08:00
parent 6aaddfbe9e
commit de1e409447
5 changed files with 30 additions and 10 deletions

View File

@@ -122,7 +122,7 @@ class OrderableAdminMixin:
class ActivityAdmin(ModelAdmin): 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', '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') list_filter = ('is_visible', 'is_active', 'auto_confirm', 'start_time')
search_fields = ('title', 'location') search_fields = ('title', 'location', 'author__phone_number')
# autocomplete_fields = ['author'] # 暂时注释,避免环境不一致导致报错 # autocomplete_fields = ['author'] # 暂时注释,避免环境不一致导致报错
raw_id_fields = ('author',) raw_id_fields = ('author',)
inlines = [ActivitySignupInline] inlines = [ActivitySignupInline]
@@ -157,7 +157,7 @@ class ActivityAdmin(ModelAdmin):
class ActivitySignupAdmin(ModelAdmin): class ActivitySignupAdmin(ModelAdmin):
list_display = ('activity', 'user', 'signup_time', 'status_label', 'order_link') list_display = ('activity', 'user', 'signup_time', 'status_label', 'order_link')
list_filter = ('status', 'signup_time', 'activity') list_filter = ('status', 'signup_time', 'activity')
search_fields = ('user__nickname', 'activity__title') search_fields = ('user__nickname', 'user__phone_number', 'activity__title')
autocomplete_fields = ['activity', 'user'] autocomplete_fields = ['activity', 'user']
actions = [export_signups_csv, export_signups_excel] actions = [export_signups_csv, export_signups_excel]
@@ -211,7 +211,7 @@ class ActivitySignupAdmin(ModelAdmin):
class TopicAdmin(OrderableAdminMixin, ModelAdmin): 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', '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') list_filter = ('status', 'category', 'is_pinned', 'created_at', 'related_product', 'related_service', 'related_course')
search_fields = ('title', 'content', 'author__nickname') search_fields = ('title', 'content', 'author__nickname', 'author__phone_number')
autocomplete_fields = ['author', 'related_product', 'related_service', 'related_course'] autocomplete_fields = ['author', 'related_product', 'related_service', 'related_course']
filter_horizontal = ('likes',) filter_horizontal = ('likes',)
inlines = [TopicMediaInline, ReplyInline] inlines = [TopicMediaInline, ReplyInline]
@@ -279,7 +279,7 @@ class TopicAdmin(OrderableAdminMixin, ModelAdmin):
class ReplyAdmin(ModelAdmin): class ReplyAdmin(ModelAdmin):
list_display = ('short_content', 'topic', 'author', 'is_pinned', 'like_count', 'created_at') list_display = ('short_content', 'topic', 'author', 'is_pinned', 'like_count', 'created_at')
list_filter = ('is_pinned', 'created_at') list_filter = ('is_pinned', 'created_at')
search_fields = ('content', 'author__nickname', 'topic__title') search_fields = ('content', 'author__nickname', 'author__phone_number', 'topic__title')
autocomplete_fields = ['author', 'topic', 'reply_to'] autocomplete_fields = ['author', 'topic', 'reply_to']
filter_horizontal = ('likes',) filter_horizontal = ('likes',)
list_editable = ('is_pinned',) list_editable = ('is_pinned',)

View File

@@ -0,0 +1,20 @@
# Generated by Django 6.0.1 on 2026-03-17 11:11
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('community', '0002_activity_author'),
('shop', '0039_vccourse_video_embed_code'),
]
operations = [
migrations.AlterField(
model_name='activity',
name='author',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='activities', to='shop.wechatuser', to_field='phone_number', verbose_name='发布者'),
),
]

View File

@@ -18,7 +18,7 @@ class Activity(models.Model):
is_paid = models.BooleanField(default=False, verbose_name="是否收费") is_paid = models.BooleanField(default=False, verbose_name="是否收费")
price = models.DecimalField(max_digits=10, decimal_places=2, default=0, verbose_name="报名费用") price = models.DecimalField(max_digits=10, decimal_places=2, default=0, verbose_name="报名费用")
author = models.ForeignKey(WeChatUser, on_delete=models.SET_NULL, related_name='activities', verbose_name="发布者", null=True, blank=True) author = models.ForeignKey(WeChatUser, to_field='phone_number', on_delete=models.SET_NULL, related_name='activities', verbose_name="发布者", null=True, blank=True)
is_active = models.BooleanField(default=True, verbose_name="是否启用") is_active = models.BooleanField(default=True, verbose_name="是否启用")
is_visible = models.BooleanField(default=True, verbose_name="是否显示", help_text="关闭后将不在前端列表页显示") is_visible = models.BooleanField(default=True, verbose_name="是否显示", help_text="关闭后将不在前端列表页显示")

View File

@@ -385,7 +385,7 @@ class SalespersonAdmin(ModelAdmin):
class CommissionLogAdmin(ModelAdmin): class CommissionLogAdmin(ModelAdmin):
list_display = ('id', 'salesperson', 'distributor', 'amount', 'level', 'status', 'created_at') list_display = ('id', 'salesperson', 'distributor', 'amount', 'level', 'status', 'created_at')
list_filter = ('status', 'level', 'salesperson', 'distributor', 'created_at') list_filter = ('status', 'level', 'salesperson', 'distributor', 'created_at')
search_fields = ('salesperson__name', 'distributor__user__nickname', 'order__id') search_fields = ('salesperson__name', 'distributor__user__nickname', 'distributor__user__phone_number', 'order__id')
readonly_fields = ('amount', 'level', 'created_at') readonly_fields = ('amount', 'level', 'created_at')
fieldsets = ( fieldsets = (
@@ -482,7 +482,7 @@ class ProductTypeFilter(admin.SimpleListFilter):
class OrderAdmin(ModelAdmin): class OrderAdmin(ModelAdmin):
list_display = ('id', 'customer_name', 'get_item_name', 'total_price', 'status', 'salesperson', 'distributor', 'created_at') list_display = ('id', 'customer_name', 'get_item_name', 'total_price', 'status', 'salesperson', 'distributor', 'created_at')
list_filter = ('status', ProductTypeFilter, 'config', 'course', 'activity', PriceRangeFilter, 'salesperson', 'distributor', 'created_at') list_filter = ('status', ProductTypeFilter, 'config', 'course', 'activity', PriceRangeFilter, 'salesperson', 'distributor', 'created_at')
search_fields = ('id', 'customer_name', 'phone_number', 'wechat_trade_no') search_fields = ('id', 'customer_name', 'phone_number', 'wechat_trade_no', 'wechat_user__phone_number')
readonly_fields = ('total_price', 'created_at', 'wechat_trade_no') readonly_fields = ('total_price', 'created_at', 'wechat_trade_no')
actions = [export_to_csv, export_to_excel] actions = [export_to_csv, export_to_excel]
@@ -569,7 +569,7 @@ class WeChatUserAdmin(OrderableAdminMixin, ModelAdmin):
@admin.register(Distributor) @admin.register(Distributor)
class DistributorAdmin(ModelAdmin): class DistributorAdmin(ModelAdmin):
list_display = ('get_nickname', 'level', 'status', 'total_earnings', 'withdrawable_balance', 'invite_code', 'created_at') list_display = ('get_nickname', 'level', 'status', 'total_earnings', 'withdrawable_balance', 'invite_code', 'created_at')
search_fields = ('user__nickname', 'invite_code') search_fields = ('user__nickname', 'user__phone_number', 'invite_code')
list_filter = ('status', 'level', 'created_at') list_filter = ('status', 'level', 'created_at')
readonly_fields = ('total_earnings', 'withdrawable_balance', 'qr_code_url', 'created_at', 'updated_at') readonly_fields = ('total_earnings', 'withdrawable_balance', 'qr_code_url', 'created_at', 'updated_at')
autocomplete_fields = ['user', 'parent'] autocomplete_fields = ['user', 'parent']
@@ -598,7 +598,7 @@ class DistributorAdmin(ModelAdmin):
class WithdrawalAdmin(ModelAdmin): class WithdrawalAdmin(ModelAdmin):
list_display = ('get_distributor', 'amount', 'status', 'created_at') list_display = ('get_distributor', 'amount', 'status', 'created_at')
list_filter = ('status', 'created_at') list_filter = ('status', 'created_at')
search_fields = ('distributor__user__nickname',) search_fields = ('distributor__user__nickname', 'distributor__user__phone_number')
def get_distributor(self, obj): def get_distributor(self, obj):
return obj.distributor.user.nickname return obj.distributor.user.nickname

View File

@@ -41,7 +41,7 @@ class WeChatUser(models.Model):
self.order = self.pk self.order = self.pk
def __str__(self): def __str__(self):
return self.nickname or self.openid return self.phone_number or self.nickname or self.openid
class Meta: class Meta:
verbose_name = "微信用户" verbose_name = "微信用户"