89 lines
3.1 KiB
Python
89 lines
3.1 KiB
Python
from rest_framework import serializers
|
||
|
||
from blog.models import Category, Post, Tags
|
||
|
||
|
||
class CateSerializer(serializers.ModelSerializer):
|
||
parent = serializers.StringRelatedField() # ID yerine __str__ metodundaki değeri döndürür
|
||
|
||
class Meta:
|
||
model = Category
|
||
fields = ['title', 'parent', 'is_active', 'created_at', 'order', 'slug', 'image', 'keywords', 'description']
|
||
|
||
|
||
class TagSerializer(serializers.ModelSerializer):
|
||
class Meta:
|
||
model = Tags
|
||
fields = ['tag', 'slug']
|
||
|
||
|
||
class PostSerializer(serializers.ModelSerializer):
|
||
categories = CateSerializer(read_only=True, many=True)
|
||
# Tags için sadece tag ismini döndürmek daha temiz olabilir, ama mevcut yapıyı koruyalım
|
||
# Eğer sadece isim listesi istenirse: tags = serializers.SlugRelatedField(many=True, read_only=True, slug_field='tag')
|
||
tags = TagSerializer(read_only=True, many=True)
|
||
|
||
class Meta:
|
||
model = Post
|
||
fields = ['title', 'content', 'categories', 'keywords', 'tags', 'image', 'thumb', 'video',
|
||
'slug', 'created_at', 'updated_at', 'is_active', 'is_front']
|
||
# fields = '__all__'
|
||
|
||
|
||
class PostSYalinerializer(serializers.ModelSerializer):
|
||
class Meta:
|
||
model = Post
|
||
fields = ['slug', ]
|
||
# fields = '__all__'
|
||
|
||
|
||
class CategorySerializer(serializers.ModelSerializer):
|
||
|
||
posts = PostSYalinerializer(source='c_categories', read_only=True, many=True)
|
||
child = serializers.SerializerMethodField()
|
||
|
||
class Meta:
|
||
model = Category
|
||
fields = ['title', 'parent', 'is_active', 'created_at', 'order', 'slug', 'image', 'keywords', 'description',
|
||
'posts', 'child']
|
||
|
||
def get_child(self, obj):
|
||
serializer = self.__class__(obj.child.all(), many=True, context=self.context)
|
||
return serializer.data
|
||
|
||
|
||
class CategoryPostSerializer(serializers.ModelSerializer):
|
||
|
||
posts = serializers.SerializerMethodField()
|
||
child = serializers.SerializerMethodField()
|
||
|
||
class Meta:
|
||
model = Category
|
||
fields = ['title', 'parent', 'is_active', 'created_at', 'order', 'slug', 'image', 'keywords', 'description',
|
||
'posts', 'child']
|
||
|
||
def get_posts(self, obj):
|
||
# Pagination context'ini al
|
||
paginator = self.context.get('paginator')
|
||
request = self.context.get('request')
|
||
|
||
posts = obj.c_categories.all()
|
||
|
||
if paginator and request:
|
||
# Pagination uygula
|
||
paginated_posts = paginator.paginate_queryset(posts, request)
|
||
serializer = PostSerializer(paginated_posts, many=True, context=self.context)
|
||
return {
|
||
'results': serializer.data,
|
||
'count': posts.count(),
|
||
'next': paginator.get_next_link(),
|
||
'previous': paginator.get_previous_link(),
|
||
}
|
||
else:
|
||
# Pagination yoksa normal döndür
|
||
serializer = PostSerializer(posts, many=True, context=self.context)
|
||
return serializer.data
|
||
|
||
def get_child(self, obj):
|
||
serializer = self.__class__(obj.child.all(), many=True, context=self.context)
|
||
return serializer.data |