解决账户中心的问题

This commit is contained in:
Azmat@qq.com
2026-09-07 14:36:23 +08:00
parent dde0a67b1c
commit 0d56fdb299
6 changed files with 107 additions and 24 deletions
+15
View File
@@ -13,6 +13,9 @@ class CreditAccountSerializer(serializers.ModelSerializer):
class CreditLedgerSerializer(serializers.ModelSerializer):
# 成员展示名:优先真实姓名 → 用户名 → 邮箱;系统流水(无 user)留空
user_label = serializers.SerializerMethodField()
# 扣费项目:与任务监控类型列同源,供账户中心流水展示
task_type = serializers.SerializerMethodField()
project_title = serializers.SerializerMethodField()
class Meta:
model = CreditLedger
@@ -21,7 +24,9 @@ class CreditLedgerSerializer(serializers.ModelSerializer):
"user",
"user_label",
"project",
"project_title",
"task",
"task_type",
"ledger_type",
"amount",
"balance_after",
@@ -37,6 +42,16 @@ class CreditLedgerSerializer(serializers.ModelSerializer):
return ""
return user.first_name or user.username or user.email or ""
def get_task_type(self, obj):
task = getattr(obj, "task", None)
return getattr(task, "task_type", "") or ""
def get_project_title(self, obj):
project = getattr(obj, "project", None)
if project is None:
return ""
return getattr(project, "title", None) or getattr(project, "name", None) or ""
class CreditReservationSerializer(serializers.ModelSerializer):
class Meta:
+12
View File
@@ -74,6 +74,18 @@ def ledgers(request):
queryset = queryset.filter(user_id=user_id)
if ledger_type and ledger_type in CreditLedger.Type.values:
queryset = queryset.filter(ledger_type=ledger_type)
# 按自然月过滤(账户页流水月份下拉);count/分页随月份变化
month_param = (request.query_params.get("month") or "").strip()
if len(month_param) == 7 and month_param[4] == "-":
try:
y = int(month_param[:4])
m = int(month_param[5:7])
if 1 <= m <= 12:
month_start = date(y, m, 1)
month_end = date(y, m, calendar.monthrange(y, m)[1])
queryset = queryset.filter(created_at__date__gte=month_start, created_at__date__lte=month_end)
except ValueError:
pass
# 服务端分页:总数随流水增长(原先写死 [:100] 导致永远 100 条)
try:
page = max(1, int(request.query_params.get("page", 1)))