Example #1
0
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
Example #2
0
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
Example #3
0
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'),
        }