class TouristicContentSerializer(PicturesSerializerMixin, PublishableSerializerMixin, ZoningSerializerMixin, TranslatedModelSerializer): themes = ThemeSerializer(many=True) category = TouristicContentCategorySerializer() type1 = TouristicContentTypeSerializer(many=True) type2 = TouristicContentTypeSerializer(many=True) source = RecordSourceSerializer() portal = TargetPortalSerializer() reservation_system = rest_serializers.Field( source='reservation_system.name') # Nearby touristic_contents = CloseTouristicContentSerializer( many=True, source='published_touristic_contents') touristic_events = CloseTouristicEventSerializer( many=True, source='published_touristic_events') treks = trekking_serializers.CloseTrekSerializer(many=True, source='published_treks') pois = trekking_serializers.ClosePOISerializer(many=True, source='published_pois') class Meta: model = tourism_models.TouristicContent geo_field = 'geom' fields = ('id', 'description', 'description_teaser', 'category', 'themes', 'contact', 'email', 'website', 'practical_info', 'type1', 'type2', 'touristic_contents', 'touristic_events', 'treks', 'pois', 'source', 'portal', 'approved', 'reservation_id', 'reservation_system',) + \ ZoningSerializerMixin.Meta.fields + \ PublishableSerializerMixin.Meta.fields + \ PicturesSerializerMixin.Meta.fields
class TouristicContentSerializer(PicturesSerializerMixin, PublishableSerializerMixin, ZoningSerializerMixin, TranslatedModelSerializer): themes = ThemeSerializer(many=True) category = TouristicContentCategorySerializer() type1 = TouristicContentTypeSerializer(many=True) type2 = TouristicContentTypeSerializer(many=True) source = RecordSourceSerializer(many=True) portal = TargetPortalSerializer(many=True) reservation_system = rest_serializers.ReadOnlyField(source='reservation_system.name', default="") # Nearby touristic_contents = CloseTouristicContentSerializer(many=True, source='published_touristic_contents') touristic_events = CloseTouristicEventSerializer(many=True, source='published_touristic_events') treks = trekking_serializers.CloseTrekSerializer(many=True, source='published_treks') pois = trekking_serializers.ClosePOISerializer(many=True, source='published_pois') def __init__(self, instance=None, *args, **kwargs): super(TouristicContentSerializer, self).__init__(instance, *args, **kwargs) if 'geotrek.diving' in settings.INSTALLED_APPS: from geotrek.diving.serializers import CloseDiveSerializer self.fields['dives'] = CloseDiveSerializer(many=True, source='published_dives') class Meta: model = tourism_models.TouristicContent fields = ('id', 'description', 'description_teaser', 'category', 'themes', 'contact', 'email', 'website', 'practical_info', 'type1', 'type2', 'touristic_contents', 'touristic_events', 'treks', 'pois', 'source', 'portal', 'approved', 'reservation_id', 'reservation_system',) + \ ZoningSerializerMixin.Meta.fields + \ PublishableSerializerMixin.Meta.fields + \ PicturesSerializerMixin.Meta.fields
class DiveSerializer(PicturesSerializerMixin, PublishableSerializerMixin, TranslatedModelSerializer): themes = ThemeSerializer(many=True) practice = PracticeSerializer() difficulty = DifficultySerializer() levels = LevelSerializer(many=True) source = RecordSourceSerializer(many=True) portal = TargetPortalSerializer(many=True) category = rest_serializers.SerializerMethodField() dives = CloseDiveSerializer(many=True, source='published_dives') treks = trekking_serializers.CloseTrekSerializer(many=True, source='published_treks') pois = trekking_serializers.ClosePOISerializer(many=True, source='published_pois') def __init__(self, instance=None, *args, **kwargs): super(DiveSerializer, self).__init__(instance, *args, **kwargs) if 'geotrek.tourism' in settings.INSTALLED_APPS: from geotrek.tourism import serializers as tourism_serializers self.fields[ 'touristic_contents'] = tourism_serializers.CloseTouristicContentSerializer( many=True, source='published_touristic_contents') self.fields[ 'touristic_events'] = tourism_serializers.CloseTouristicEventSerializer( many=True, source='published_touristic_events') class Meta: model = diving_models.Dive geo_field = 'geom' fields = ( 'id', 'practice', 'description_teaser', 'description', 'advice', 'difficulty', 'levels', 'themes', 'owner', 'depth', 'facilities', 'departure', 'disabled_sport', 'category', 'source', 'portal', 'eid', 'dives', 'treks', 'pois' ) + PublishableSerializerMixin.Meta.fields + PicturesSerializerMixin.Meta.fields def get_category(self, obj): if settings.SPLIT_DIVES_CATEGORIES_BY_PRACTICE and obj.practice: data = { 'id': obj.prefixed_category_id, 'label': obj.practice.name, 'pictogram': obj.practice.get_pictogram_url(), 'slug': obj.practice.slug, } else: data = { 'id': obj.category_id_prefix, 'label': _("Dive"), 'pictogram': '/static/diving/dive.svg', # Translators: This is a slug (without space, accent or special char) 'slug': _('dive'), } if settings.SPLIT_DIVES_CATEGORIES_BY_PRACTICE: data['order'] = obj.practice and obj.practice.order else: data['order'] = settings.DIVE_CATEGORY_ORDER return data
class TouristicEventSerializer(PicturesSerializerMixin, PublishableSerializerMixin, ZoningSerializerMixin, TranslatedModelSerializer): themes = ThemeSerializer(many=True) type = TouristicEventTypeSerializer() source = RecordSourceSerializer(many=True) portal = TargetPortalSerializer(many=True) # Nearby touristic_contents = CloseTouristicContentSerializer( many=True, source='published_touristic_contents') touristic_events = CloseTouristicEventSerializer( many=True, source='published_touristic_events') treks = trekking_serializers.CloseTrekSerializer(many=True, source='published_treks') pois = trekking_serializers.ClosePOISerializer(many=True, source='published_pois') # For consistency with touristic contents type1 = TouristicEventTypeSerializer(many=True) category = rest_serializers.SerializerMethodField() def __init__(self, instance=None, *args, **kwargs): super(TouristicEventSerializer, self).__init__(instance, *args, **kwargs) if 'geotrek.diving' in settings.INSTALLED_APPS: from geotrek.diving.serializers import CloseDiveSerializer self.fields['dives'] = CloseDiveSerializer( many=True, source='published_dives') class Meta: model = tourism_models.TouristicEvent geo_field = 'geom' fields = ('id', 'description_teaser', 'description', 'themes', 'begin_date', 'end_date', 'duration', 'meeting_point', 'meeting_time', 'contact', 'email', 'website', 'organizer', 'speaker', 'type', 'accessibility', 'participant_number', 'booking', 'target_audience', 'practical_info', 'touristic_contents', 'touristic_events', 'treks', 'pois', 'type1', 'category', 'source', 'portal', 'approved') + \ ZoningSerializerMixin.Meta.fields + \ PublishableSerializerMixin.Meta.fields + \ PicturesSerializerMixin.Meta.fields def get_category(self, obj): return { 'id': obj.category_id_prefix, 'order': settings.TOURISTIC_EVENT_CATEGORY_ORDER, 'label': obj._meta.verbose_name_plural, 'type1_label': obj._meta.get_field('type').verbose_name, 'pictogram': '/static/tourism/touristicevent.svg', 'slug': _('touristic-event'), }