59 lines
2.1 KiB
Python
59 lines
2.1 KiB
Python
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
|