Tour operator serializer
Tour operator serializer (English fallback)
Aug. 17, 2025
Posted by admin
Nhom |
Notes |
|
Tour Operators Serializers - Detailed Analysis File Overview Purpose: API data serialization for tour operators system Location: serializers.py Framework: Django REST Framework (DRF) serializers Function: Convert Django model instances to/from JSON for API endpoints Import Dependencies from rest_framework import serializers from .models import Tour, TourOperator, TourBooking, TourCategory, TourSchedule, TourGuide Key Components:
|
|
Serializer Classes Detailed Breakdown
|
|
1. TourCategorySerializer class TourCategorySerializer(serializers.ModelSerializer): class Meta: model = TourCategory fields = ['id', 'name', 'name_vi', 'icon'] Purpose: Serialize tour categories for API consumption Fields Exposed:
API Usage:
Sample JSON Output: { "id": 1, "name": "Adventure Tours", "name_vi": "Tour Phiêu Lưu", "icon": "fa-mountain" }
|
|
2. TourOperatorSerializer class TourOperatorSerializer(serializers.ModelSerializer): class Meta: model = TourOperator fields = [ 'id', 'name', 'name_vi', 'description', 'description_vi', 'operator_type', 'city', 'country', 'average_rating', 'total_reviews', 'total_tours', 'is_verified' ] Purpose: Serialize tour operator information for API Fields Breakdown: Basic Information:
Classification:
Business Metrics:
API Use Cases:
Sample JSON Output: { "id": 5, "name": "Saigon Adventure Tours", "name_vi": "Tour Phiêu Lưu Sài Gòn", "description": "Professional tour operator specializing in Vietnam adventures", "description_vi": "Nhà tổ chức tour chuyên nghiệp chuyên về phiêu lưu Việt Nam", "operator_type": "local", "city": "Ho Chi Minh City", "country": "Vietnam", "average_rating": 4.8, "total_reviews": 156, "total_tours": 23, "is_verified": true }
|
|
3. TourScheduleSerializer class TourScheduleSerializer(serializers.ModelSerializer): remaining_spots = serializers.ReadOnlyField()
class Meta: model = TourSchedule fields = [ 'id', 'start_date', 'start_time', 'available_spots', 'booked_spots', 'remaining_spots', 'price_override' ] Purpose: Serialize tour scheduling and availability data Special Features:
Fields Explanation:
Business Logic:
Sample JSON Output: { "id": 45, "start_date": "2025-08-15", "start_time": "08:00:00", "available_spots": 20, "booked_spots": 12, "remaining_spots": 8, "price_override": 150.00 }
|
|
4. TourGuideSerializer class TourGuideSerializer(serializers.ModelSerializer): name = serializers.CharField(source='user.get_full_name', read_only=True)
class Meta: model = TourGuide fields = [ 'id', 'name', 'bio', 'bio_vi', 'years_experience', 'average_rating', 'total_tours_guided', 'languages' ] Purpose: Serialize tour guide profiles for API Special Features:
Fields Breakdown: Personal Information:
Professional Data:
API Applications:
|
|
5. TourSerializer (Main Serializer) class TourSerializer(serializers.ModelSerializer): tour_operator = TourOperatorSerializer(read_only=True) categories = TourCategorySerializer(many=True, read_only=True) schedules = TourScheduleSerializer(many=True, read_only=True) duration_display = serializers.ReadOnlyField()
class Meta: model = Tour fields = [ 'id', 'uuid', 'title', 'title_vi', 'slug', 'short_description', 'short_description_vi', 'description', 'description_vi', 'tour_operator', 'categories', 'tour_type', 'difficulty', 'duration_days', 'duration_hours', 'duration_display', 'start_location', 'end_location', 'min_participants', 'max_participants', 'base_price', 'price_currency', 'includes_accommodation', 'includes_meals', 'includes_transport', 'includes_guide', 'includes_tickets', 'main_image', 'video_url', 'average_rating', 'total_reviews', 'total_bookings', 'is_featured', 'schedules' ] Purpose: Complete tour information serialization Nested Relationships:
Field Categories: Identification:
Descriptions:
Tour Details:
Pricing & Inclusions:
Media & Marketing:
Statistics:
|
|
6. TourBookingSerializer (Complex Serializer) class TourBookingSerializer(serializers.ModelSerializer): tour = TourSerializer(read_only=True) tour_id = serializers.IntegerField(write_only=True) schedule_id = serializers.IntegerField(write_only=True)
class Meta: model = TourBooking fields = [ 'id', 'booking_number', 'tour', 'tour_id', 'schedule_id', 'lead_traveler_name', 'lead_traveler_email', 'lead_traveler_phone', 'adult_count', 'child_count', 'senior_count', 'total_participants', 'total_price', 'special_requests', 'dietary_requirements', 'accessibility_needs', 'booking_status', 'payment_status', 'booking_date' ] read_only_fields = ['booking_number', 'total_price', 'booking_date'] Purpose: Handle tour booking creation and management Advanced Features: Read/Write Field Separation:
Protected Fields:
Customer Information:
|
|
Custom Create Method def create(self, validated_data): tour_id = validated_data.pop('tour_id') schedule_id = validated_data.pop('schedule_id')
tour = Tour.objects.get(id=tour_id) schedule = TourSchedule.objects.get(id=schedule_id, tour=tour)
booking = TourBooking.objects.create( tour=tour, schedule=schedule, customer=self.context['request'].user, **validated_data )
return booking Purpose: Custom booking creation logic Process Flow:
Business Logic:
API Integration Architecture Serializer Hierarchy TourSerializer (Main) ├── TourOperatorSerializer (Nested) ├── TourCategorySerializer (Many-to-Many) └── TourScheduleSerializer (Many-to-Many) TourBookingSerializer ├── TourSerializer (Nested, Read-only) └── Custom create() method
|
|
Use Cases by Serializer TourCategorySerializer:
TourOperatorSerializer:
TourScheduleSerializer:
TourGuideSerializer:
TourSerializer:
TourBookingSerializer:
Performance Considerations Nested Serialization:
Read-Only Fields:
Write-Only Fields:
This serializer system provides a robust, efficient API layer for the tour operators platform, supporting complex business logic while maintaining clean, RESTful interfaces for frontend consumption.
|
Nhom |
Notes |
|
Tour Operators Serializers - Detailed Analysis File Overview Purpose: API data serialization for tour operators system Location: serializers.py Framework: Django REST Framework (DRF) serializers Function: Convert Django model instances to/from JSON for API endpoints Import Dependencies from rest_framework import serializers from .models import Tour, TourOperator, TourBooking, TourCategory, TourSchedule, TourGuide Key Components:
|
|
Serializer Classes Detailed Breakdown
|
|
1. TourCategorySerializer class TourCategorySerializer(serializers.ModelSerializer): class Meta: model = TourCategory fields = ['id', 'name', 'name_vi', 'icon'] Purpose: Serialize tour categories for API consumption Fields Exposed:
API Usage:
Sample JSON Output: { "id": 1, "name": "Adventure Tours", "name_vi": "Tour Phiêu Lưu", "icon": "fa-mountain" }
|
|
2. TourOperatorSerializer class TourOperatorSerializer(serializers.ModelSerializer): class Meta: model = TourOperator fields = [ 'id', 'name', 'name_vi', 'description', 'description_vi', 'operator_type', 'city', 'country', 'average_rating', 'total_reviews', 'total_tours', 'is_verified' ] Purpose: Serialize tour operator information for API Fields Breakdown: Basic Information:
Classification:
Business Metrics:
API Use Cases:
Sample JSON Output: { "id": 5, "name": "Saigon Adventure Tours", "name_vi": "Tour Phiêu Lưu Sài Gòn", "description": "Professional tour operator specializing in Vietnam adventures", "description_vi": "Nhà tổ chức tour chuyên nghiệp chuyên về phiêu lưu Việt Nam", "operator_type": "local", "city": "Ho Chi Minh City", "country": "Vietnam", "average_rating": 4.8, "total_reviews": 156, "total_tours": 23, "is_verified": true }
|
|
3. TourScheduleSerializer class TourScheduleSerializer(serializers.ModelSerializer): remaining_spots = serializers.ReadOnlyField()
class Meta: model = TourSchedule fields = [ 'id', 'start_date', 'start_time', 'available_spots', 'booked_spots', 'remaining_spots', 'price_override' ] Purpose: Serialize tour scheduling and availability data Special Features:
Fields Explanation:
Business Logic:
Sample JSON Output: { "id": 45, "start_date": "2025-08-15", "start_time": "08:00:00", "available_spots": 20, "booked_spots": 12, "remaining_spots": 8, "price_override": 150.00 }
|
|
4. TourGuideSerializer class TourGuideSerializer(serializers.ModelSerializer): name = serializers.CharField(source='user.get_full_name', read_only=True)
class Meta: model = TourGuide fields = [ 'id', 'name', 'bio', 'bio_vi', 'years_experience', 'average_rating', 'total_tours_guided', 'languages' ] Purpose: Serialize tour guide profiles for API Special Features:
Fields Breakdown: Personal Information:
Professional Data:
API Applications:
|
|
5. TourSerializer (Main Serializer) class TourSerializer(serializers.ModelSerializer): tour_operator = TourOperatorSerializer(read_only=True) categories = TourCategorySerializer(many=True, read_only=True) schedules = TourScheduleSerializer(many=True, read_only=True) duration_display = serializers.ReadOnlyField()
class Meta: model = Tour fields = [ 'id', 'uuid', 'title', 'title_vi', 'slug', 'short_description', 'short_description_vi', 'description', 'description_vi', 'tour_operator', 'categories', 'tour_type', 'difficulty', 'duration_days', 'duration_hours', 'duration_display', 'start_location', 'end_location', 'min_participants', 'max_participants', 'base_price', 'price_currency', 'includes_accommodation', 'includes_meals', 'includes_transport', 'includes_guide', 'includes_tickets', 'main_image', 'video_url', 'average_rating', 'total_reviews', 'total_bookings', 'is_featured', 'schedules' ] Purpose: Complete tour information serialization Nested Relationships:
Field Categories: Identification:
Descriptions:
Tour Details:
Pricing & Inclusions:
Media & Marketing:
Statistics:
|
|
6. TourBookingSerializer (Complex Serializer) class TourBookingSerializer(serializers.ModelSerializer): tour = TourSerializer(read_only=True) tour_id = serializers.IntegerField(write_only=True) schedule_id = serializers.IntegerField(write_only=True)
class Meta: model = TourBooking fields = [ 'id', 'booking_number', 'tour', 'tour_id', 'schedule_id', 'lead_traveler_name', 'lead_traveler_email', 'lead_traveler_phone', 'adult_count', 'child_count', 'senior_count', 'total_participants', 'total_price', 'special_requests', 'dietary_requirements', 'accessibility_needs', 'booking_status', 'payment_status', 'booking_date' ] read_only_fields = ['booking_number', 'total_price', 'booking_date'] Purpose: Handle tour booking creation and management Advanced Features: Read/Write Field Separation:
Protected Fields:
Customer Information:
|
|
Custom Create Method def create(self, validated_data): tour_id = validated_data.pop('tour_id') schedule_id = validated_data.pop('schedule_id')
tour = Tour.objects.get(id=tour_id) schedule = TourSchedule.objects.get(id=schedule_id, tour=tour)
booking = TourBooking.objects.create( tour=tour, schedule=schedule, customer=self.context['request'].user, **validated_data )
return booking Purpose: Custom booking creation logic Process Flow:
Business Logic:
API Integration Architecture Serializer Hierarchy TourSerializer (Main) ├── TourOperatorSerializer (Nested) ├── TourCategorySerializer (Many-to-Many) └── TourScheduleSerializer (Many-to-Many) TourBookingSerializer ├── TourSerializer (Nested, Read-only) └── Custom create() method
|
|
Use Cases by Serializer TourCategorySerializer:
TourOperatorSerializer:
TourScheduleSerializer:
TourGuideSerializer:
TourSerializer:
TourBookingSerializer:
Performance Considerations Nested Serialization:
Read-Only Fields:
Write-Only Fields:
This serializer system provides a robust, efficient API layer for the tour operators platform, supporting complex business logic while maintaining clean, RESTful interfaces for frontend consumption.
|
Attached Files
You are viewing this article in public mode. Some features may be limited.