This commit is contained in:
Iliyan Angelov
2025-11-24 08:18:18 +02:00
parent 366f28677a
commit 136f75a859
133 changed files with 14977 additions and 3350 deletions

View File

@@ -47,10 +47,11 @@ class CaseStudyProcessSerializer(serializers.ModelSerializer):
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)
category_name = serializers.SerializerMethodField()
category_slug = serializers.SerializerMethodField()
client_name = serializers.SerializerMethodField()
thumbnail = serializers.SerializerMethodField()
excerpt = serializers.SerializerMethodField()
class Meta:
model = CaseStudy
@@ -61,6 +62,25 @@ class CaseStudyListSerializer(serializers.ModelSerializer):
'views_count', 'featured', 'published', 'display_order'
]
def get_category_name(self, obj):
return obj.category.name if obj.category else None
def get_category_slug(self, obj):
return obj.category.slug if obj.category else None
def get_client_name(self, obj):
return obj.client.name if obj.client else None
def get_excerpt(self, obj):
if obj.excerpt:
return obj.excerpt
if obj.description:
# Strip HTML tags and get first 200 characters
import re
text = re.sub(r'<[^>]+>', '', obj.description)
return text[:200] + '...' if len(text) > 200 else text
return ''
def get_thumbnail(self, obj):
return obj.get_thumbnail_url
@@ -103,9 +123,15 @@ class CaseStudyDetailSerializer(serializers.ModelSerializer):
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]
if not obj.category:
# If no category, get any published case studies
related = CaseStudy.objects.filter(
published=True
).exclude(id=obj.id)[:3]
else:
related = CaseStudy.objects.filter(
category=obj.category,
published=True
).exclude(id=obj.id)[:3]
return CaseStudyListSerializer(related, many=True, context=self.context).data