update
This commit is contained in:
111
backEnd/case_studies/serializers.py
Normal file
111
backEnd/case_studies/serializers.py
Normal file
@@ -0,0 +1,111 @@
|
||||
from rest_framework import serializers
|
||||
from .models import CaseStudy, CaseStudyCategory, Client, CaseStudyImage, CaseStudyProcess
|
||||
|
||||
|
||||
class CaseStudyCategorySerializer(serializers.ModelSerializer):
|
||||
"""Serializer for case study categories"""
|
||||
case_studies_count = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = CaseStudyCategory
|
||||
fields = ['id', 'name', 'slug', 'description', 'display_order', 'case_studies_count']
|
||||
|
||||
def get_case_studies_count(self, obj):
|
||||
return obj.case_studies.filter(published=True).count()
|
||||
|
||||
|
||||
class ClientSerializer(serializers.ModelSerializer):
|
||||
"""Serializer for clients"""
|
||||
logo = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = Client
|
||||
fields = ['id', 'name', 'slug', 'logo', 'description', 'website']
|
||||
|
||||
def get_logo(self, obj):
|
||||
return obj.get_logo_url
|
||||
|
||||
|
||||
class CaseStudyImageSerializer(serializers.ModelSerializer):
|
||||
"""Serializer for case study gallery images"""
|
||||
image = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = CaseStudyImage
|
||||
fields = ['id', 'image', 'caption', 'display_order']
|
||||
|
||||
def get_image(self, obj):
|
||||
return obj.get_image_url
|
||||
|
||||
|
||||
class CaseStudyProcessSerializer(serializers.ModelSerializer):
|
||||
"""Serializer for case study process steps"""
|
||||
class Meta:
|
||||
model = CaseStudyProcess
|
||||
fields = ['id', 'title', 'description', 'step_number']
|
||||
|
||||
|
||||
class CaseStudyListSerializer(serializers.ModelSerializer):
|
||||
"""Serializer for case study list view"""
|
||||
category_name = serializers.CharField(source='category.name', read_only=True)
|
||||
category_slug = serializers.CharField(source='category.slug', read_only=True)
|
||||
client_name = serializers.CharField(source='client.name', read_only=True, allow_null=True)
|
||||
thumbnail = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = CaseStudy
|
||||
fields = [
|
||||
'id', 'title', 'slug', 'subtitle', 'excerpt', 'thumbnail',
|
||||
'category_name', 'category_slug', 'client_name',
|
||||
'published_at', 'created_at', 'updated_at',
|
||||
'views_count', 'featured', 'published', 'display_order'
|
||||
]
|
||||
|
||||
def get_thumbnail(self, obj):
|
||||
return obj.get_thumbnail_url
|
||||
|
||||
|
||||
class CaseStudyDetailSerializer(serializers.ModelSerializer):
|
||||
"""Serializer for case study detail view"""
|
||||
category = CaseStudyCategorySerializer(read_only=True)
|
||||
client = ClientSerializer(read_only=True)
|
||||
thumbnail = serializers.SerializerMethodField()
|
||||
featured_image = serializers.SerializerMethodField()
|
||||
poster_image = serializers.SerializerMethodField()
|
||||
project_image = serializers.SerializerMethodField()
|
||||
gallery_images = CaseStudyImageSerializer(many=True, read_only=True)
|
||||
process_steps = CaseStudyProcessSerializer(many=True, read_only=True)
|
||||
related_case_studies = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = CaseStudy
|
||||
fields = [
|
||||
'id', 'title', 'slug', 'subtitle', 'description', 'excerpt',
|
||||
'thumbnail', 'featured_image', 'poster_image', 'project_image',
|
||||
'project_overview', 'site_map_content',
|
||||
'category', 'client', 'gallery_images', 'process_steps',
|
||||
'meta_description', 'meta_keywords',
|
||||
'published', 'featured', 'views_count', 'display_order',
|
||||
'published_at', 'created_at', 'updated_at', 'related_case_studies'
|
||||
]
|
||||
|
||||
def get_thumbnail(self, obj):
|
||||
return obj.get_thumbnail_url
|
||||
|
||||
def get_featured_image(self, obj):
|
||||
return obj.get_featured_image_url
|
||||
|
||||
def get_poster_image(self, obj):
|
||||
return obj.get_poster_image_url
|
||||
|
||||
def get_project_image(self, obj):
|
||||
return obj.get_project_image_url
|
||||
|
||||
def get_related_case_studies(self, obj):
|
||||
"""Get related case studies from the same category"""
|
||||
related = CaseStudy.objects.filter(
|
||||
category=obj.category,
|
||||
published=True
|
||||
).exclude(id=obj.id)[:3]
|
||||
return CaseStudyListSerializer(related, many=True, context=self.context).data
|
||||
|
||||
Reference in New Issue
Block a user