You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

131 lines
4.3 KiB

from rest_framework import serializers
from utils import get_thumbs
from apps.article.models import *
from apps.bookmark.serializers import *
class ArticleCategoryListSerializer(serializers.ModelSerializer):
acticle_count = serializers.SerializerMethodField()
class Meta:
model = ArticleCategory
fields = ['id', 'title', 'slug', 'acticle_count']
def get_acticle_count(self, obj):
return obj.articles.filter(status=True).count()
class PinnedArticleCollectionSerializer(serializers.ModelSerializer):
thumbnail = serializers.SerializerMethodField()
class Meta:
model = ArticleCollection
fields = ['id', 'title', 'slug', 'summary', 'thumbnail', 'order', 'created_at']
def get_thumbnail(self, obj):
return get_thumbs(obj.thumbnail, self.context.get('request'))
class MiddleArticleCollectionSerializer(serializers.ModelSerializer):
articles = serializers.SerializerMethodField()
class Meta:
model = ArticleCollection
fields = ('id', 'title', 'slug', 'summary', 'status', 'order', 'pin_top', 'articles')
def get_podcasts(self, obj):
articles = obj.articles.filter(status=True).order_by('-created_at')
return ArticleListSerializer(articles, many=True, context=self.context).data
class ArticleListSerializer(serializers.ModelSerializer):
thumbnail = serializers.SerializerMethodField()
class Meta:
model = Article
fields = ['id', 'title', 'slug', 'thumbnail', 'description', 'view_count', 'created_at']
def get_thumbnail(self, obj):
return get_thumbs(obj.thumbnail, self.context.get('request'))
class ContentPartSerializer(serializers.ModelSerializer):
class Meta:
model = ContentPart
fields = ['id', 'arabic_text', 'translation', 'order', 'created_at', 'updated_at']
class ArticleContentSerializer(serializers.ModelSerializer):
parts = ContentPartSerializer(many=True, read_only=True)
class Meta:
model = ArticleContent
fields = ['id', 'title', 'content', 'priority', 'status', 'created_at', 'updated_at', 'parts']
class ArticleDetailSerializer(serializers.ModelSerializer):
categories = ArticleCategoryListSerializer(many=True, read_only=True)
thumbnail = serializers.SerializerMethodField()
bookmark = serializers.SerializerMethodField()
user_rate = serializers.SerializerMethodField()
average_rate = serializers.SerializerMethodField()
class Meta:
model = Article
fields = ['id', 'title', 'slug', 'thumbnail', 'description',
'article_file', 'view_count', 'download_count',
'categories', 'created_at', 'user_rate', 'average_rate', 'bookmark']
def get_thumbnail(self, obj):
return get_thumbs(obj.thumbnail, self.context.get('request'))
def get_bookmark(self, obj):
"""
Get bookmark information for this article.
"""
# Get the current user from the request context
request = self.context.get('request')
user = request.user if request else None
book_mark = BookmarkStatusSerializer.get_bookmark_info(
obj=obj,
user=user,
service='article',
)
return book_mark.get('is_bookmarked', False)
def get_user_rate(self, obj):
"""
Get rate information for this article from the current user.
"""
from apps.bookmark.models.rate import Rate
# Get the current user from the request context
request = self.context.get('request')
user = request.user if request and request.user.is_authenticated else None
if not user:
return {
'is_rated': False,
'rate': None
}
# Get rate information using the Rate model's method
rate_info = Rate.get_user_rate(
user=user,
service='article',
content_id=obj.id
)
return rate_info
def get_average_rate(self, obj):
"""
Get the average rate for this article.
"""
from apps.bookmark.models.rate import Rate
# Get average rate information using the Rate model
return Rate.get_average_rate(
service='article',
content_id=obj.id
)