Files
dj_beyhan/blog/serializers.py
Beyhan Oğur 3de0ca1fb5 first commit
2026-04-26 22:23:47 +03:00

89 lines
3.1 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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