Files
chunyu_project/apidirectory/serializers.py
T
2026-08-05 23:59:15 +08:00

50 lines
1.8 KiB
Python

from rest_framework import serializers
from .models import ApiCategory, ApiItem, ApiFavorite
class ApiCategorySerializer(serializers.ModelSerializer):
item_count = serializers.SerializerMethodField()
class Meta:
model = ApiCategory
fields = ['id', 'name', 'icon', 'sort_order', 'item_count', 'created_at']
read_only_fields = ['id', 'created_at']
def get_item_count(self, obj):
return obj.items.filter(is_enabled=True).count()
class ApiItemSerializer(serializers.ModelSerializer):
category_name = serializers.CharField(source='category.name', read_only=True, default='')
favorites_count = serializers.SerializerMethodField()
is_favorited = serializers.SerializerMethodField()
class Meta:
model = ApiItem
fields = [
'id', 'name', 'description', 'icon', 'url_path', 'method',
'category', 'category_name', 'is_enabled', 'is_new', 'is_coming_soon',
'views_count', 'color', 'image_url', 'sort_order', 'created_at', 'updated_at',
'favorites_count', 'is_favorited'
]
read_only_fields = ['id', 'created_at', 'updated_at']
def get_favorites_count(self, obj):
return obj.favorites.count()
def get_is_favorited(self, obj):
request = self.context.get('request')
if request and request.user.is_authenticated:
return obj.favorites.filter(user=request.user).exists()
return False
class ApiFavoriteSerializer(serializers.ModelSerializer):
api_item_name = serializers.CharField(source='api_item.name', read_only=True)
api_item_url = serializers.CharField(source='api_item.url_path', read_only=True)
class Meta:
model = ApiFavorite
fields = ['id', 'user', 'api_item', 'api_item_name', 'api_item_url', 'created_at']
read_only_fields = ['id', 'created_at']