feat: ADRF async views (phase1) + native async serializers (phase2) + async cache infra
This commit is contained in:
+16
-16
@@ -1,23 +1,23 @@
|
||||
from rest_framework import serializers
|
||||
from adrf.serializers import ModelSerializer, CharField, SerializerMethodField
|
||||
from .models import ApiCategory, ApiItem, ApiFavorite
|
||||
|
||||
|
||||
class ApiCategorySerializer(serializers.ModelSerializer):
|
||||
item_count = serializers.SerializerMethodField()
|
||||
class ApiCategorySerializer(ModelSerializer):
|
||||
item_count = 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()
|
||||
async def get_item_count(self, obj):
|
||||
return await obj.items.filter(is_enabled=True).acount()
|
||||
|
||||
|
||||
class ApiItemSerializer(serializers.ModelSerializer):
|
||||
category_name = serializers.CharField(source='category.name', read_only=True, default='')
|
||||
favorites_count = serializers.SerializerMethodField()
|
||||
is_favorited = serializers.SerializerMethodField()
|
||||
class ApiItemSerializer(ModelSerializer):
|
||||
category_name = CharField(source='category.name', read_only=True, default='')
|
||||
favorites_count = SerializerMethodField()
|
||||
is_favorited = SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = ApiItem
|
||||
@@ -29,19 +29,19 @@ class ApiItemSerializer(serializers.ModelSerializer):
|
||||
]
|
||||
read_only_fields = ['id', 'created_at', 'updated_at']
|
||||
|
||||
def get_favorites_count(self, obj):
|
||||
return obj.favorites.count()
|
||||
async def get_favorites_count(self, obj):
|
||||
return await obj.favorites.acount()
|
||||
|
||||
def get_is_favorited(self, obj):
|
||||
async 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 await obj.favorites.filter(user=request.user).aexists()
|
||||
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 ApiFavoriteSerializer(ModelSerializer):
|
||||
api_item_name = CharField(source='api_item.name', read_only=True)
|
||||
api_item_url = CharField(source='api_item.url_path', read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = ApiFavorite
|
||||
|
||||
Reference in New Issue
Block a user