update
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user