first commit
This commit is contained in:
89
blog/serializers.py
Normal file
89
blog/serializers.py
Normal file
@@ -0,0 +1,89 @@
|
||||
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
|
||||
Reference in New Issue
Block a user