first commit
This commit is contained in:
58
portfolio/serializers.py
Normal file
58
portfolio/serializers.py
Normal file
@@ -0,0 +1,58 @@
|
||||
from rest_framework import serializers
|
||||
from django.conf import settings
|
||||
|
||||
from portfolio.models import Category, Portfolio
|
||||
|
||||
|
||||
class PortfolioCateSerializer(serializers.ModelSerializer):
|
||||
image = serializers.SerializerMethodField()
|
||||
parent = serializers.StringRelatedField()
|
||||
|
||||
class Meta:
|
||||
model = Portfolio
|
||||
fields = ['id', 'url', 'image', 'parent', 'created_at', 'updated_at', 'is_active']
|
||||
|
||||
def get_image(self, obj):
|
||||
if obj.image:
|
||||
# Sadece path döndür, domain olmadan
|
||||
return obj.image.url
|
||||
return None
|
||||
|
||||
|
||||
class CategorySerializer(serializers.ModelSerializer):
|
||||
parent = serializers.StringRelatedField() # ID yerine __str__ metodundaki değeri döndürür
|
||||
image = serializers.SerializerMethodField()
|
||||
portfolio_categories = serializers.SerializerMethodField() # ManyToMany ilişkisi üzerinden portfolio'ları getir
|
||||
|
||||
class Meta:
|
||||
model = Category
|
||||
fields = ['id', 'title', 'parent', 'is_active', 'created_at', 'updated_at', 'order', 'slug', 'image',
|
||||
'keywords', 'description', 'portfolio_categories']
|
||||
|
||||
def get_image(self, obj):
|
||||
if obj.image:
|
||||
# Sadece path döndür, domain olmadan
|
||||
return obj.image.url
|
||||
return None
|
||||
|
||||
def get_portfolio_categories(self, obj):
|
||||
"""Category'ye ait portfolio'ları döndürür"""
|
||||
portfolios = obj.portfolio_categories.filter(is_active=True).all()
|
||||
# Circular import'u önlemek için PortfolioCateSerializer kullanıyoruz
|
||||
return PortfolioCateSerializer(portfolios, many=True, context=self.context).data
|
||||
|
||||
|
||||
class PortfolioSerializer(serializers.ModelSerializer):
|
||||
categories = CategorySerializer(read_only=True, many=True)
|
||||
image = serializers.SerializerMethodField()
|
||||
parent = serializers.StringRelatedField()
|
||||
|
||||
class Meta:
|
||||
model = Portfolio
|
||||
fields = ['id', 'url', 'categories', 'image', 'parent', 'created_at', 'updated_at', 'is_active']
|
||||
|
||||
def get_image(self, obj):
|
||||
if obj.image:
|
||||
# Sadece path döndür, domain olmadan
|
||||
return obj.image.url
|
||||
return None
|
||||
Reference in New Issue
Block a user