Files

69 lines
2.1 KiB
Python

from rest_framework import serializers
from .models import CreditAccount, CreditLedger, CreditReservation, QuotaPolicy
class CreditAccountSerializer(serializers.ModelSerializer):
class Meta:
model = CreditAccount
fields = ["id", "balance", "reserved_balance", "currency", "updated_at"]
read_only_fields = fields
class CreditLedgerSerializer(serializers.ModelSerializer):
# 成员展示名:优先真实姓名 → 用户名 → 邮箱;系统流水(无 user)留空
user_label = serializers.SerializerMethodField()
# 扣费项目:与任务监控类型列同源,供账户中心流水展示
task_type = serializers.SerializerMethodField()
project_title = serializers.SerializerMethodField()
class Meta:
model = CreditLedger
fields = [
"id",
"user",
"user_label",
"project",
"project_title",
"task",
"task_type",
"ledger_type",
"amount",
"balance_after",
"reason",
"metadata",
"created_at",
]
read_only_fields = fields
def get_user_label(self, obj):
user = obj.user
if user is None:
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:
model = CreditReservation
fields = ["id", "user", "project", "task", "amount", "status", "expires_at", "created_at"]
read_only_fields = fields
class QuotaPolicySerializer(serializers.ModelSerializer):
class Meta:
model = QuotaPolicy
fields = ["id", "user", "project", "monthly_limit", "project_limit", "per_task_limit", "is_active"]
read_only_fields = ["id"]