Exemplo n.º 1
0
class CommunityMemberSerializer(serializers.ModelSerializer):
    user = PublicUserSerializer(read_only=True)
    community = CommunitySerializer(read_only=True)

    class Meta:
        model = CommunityMember
        fields = ("id", "user", "community")
Exemplo n.º 2
0
class ArtistLightSerializer(serializers.ModelSerializer):
    user = PublicUserSerializer(read_only=True)
    class Meta:
        model = Artist
        fields = (
            "id", 
            "user", 
        )
        geo_field = "point"
Exemplo n.º 3
0
class NotificationSerializer(serializers.ModelSerializer):
    user = PublicUserSerializer(read_only=True)
    language_obj = LanguageSerializer(source="language", read_only=True)
    community_obj = CommunitySerializer(source="community", read_only=True)

    class Meta:
        model = Notification
        fields = ("id", "name", "user", "language", "community",
                  "language_obj", "community_obj")
Exemplo n.º 4
0
class FavouriteSerializer(serializers.ModelSerializer):
    user = PublicUserSerializer(read_only=True)
    placename_obj = PlaceNameLightSerializer(source="place", read_only=True)
    media_obj = MediaLightSerializer(source="media", read_only=True)

    class Meta:
        model = Favourite
        fields = ("id", "name", "media", "media_obj", "user", "place",
                  "placename_obj", "favourite_type", "description", "point",
                  "zoom")
Exemplo n.º 5
0
class MediaSerializer(serializers.ModelSerializer):
    creator = PublicUserSerializer(read_only=True)
    placename_obj = PlaceNameLightSerializer(source="placename",
                                             read_only=True)

    class Meta:
        model = Media
        fields = ("id", "name", "description", "file_type", "url",
                  "media_file", "community_only", "placename", "placename_obj",
                  "community", "status", "status_reason", "creator",
                  "mime_type", "is_artwork", "created")
Exemplo n.º 6
0
class ArtistSerializer(serializers.ModelSerializer):
    user = PublicUserSerializer(read_only=True)
    class Meta:
        model = Artist
        fields = (
            "id", 
            "subtitle",
            "statement",
            # "categories",
            # "associations",
            "user",
            "phone",
            "address"
        )
        geo_field = "point"
Exemplo n.º 7
0
class PlaceNameDetailSerializer(serializers.ModelSerializer):
    medias = MediaLightSerializer(many=True, read_only=True)
    creator = PublicUserSerializer(read_only=True)
    community = serializers.PrimaryKeyRelatedField(
        queryset=Community.objects.all(), allow_null=True, required=False)
    language = serializers.PrimaryKeyRelatedField(
        queryset=Language.objects.all(), allow_null=True, required=False)
    category = serializers.PrimaryKeyRelatedField(
        queryset=PlaceNameCategory.objects.all(),
        allow_null=True,
        required=False)
    category_obj = PlaceNameCategorySerializer(source="category",
                                               read_only=True)
    favourites = FavouritePlaceNameSerializer(many=True, read_only=True)

    class Meta:
        model = PlaceName
        fields = (
            "name",
            "id",
            "geom",
            "other_names",
            "audio_file",
            "audio_name",
            "audio_description",
            "kind",
            "common_name",
            "community_only",
            "description",
            "status",
            "status_reason",
            "category",
            "category_obj",
            "medias",
            "community",
            "language",
            "creator",
            "favourites",
        )
        depth = 1
Exemplo n.º 8
0
class BorrowSerializer(serializers.ModelSerializer):
    user = PublicUserSerializer(read_only=True)

    class Meta:
        model = models.BorrowFeed
        fields = BORROW_FIELDS
Exemplo n.º 9
0
class LendSerializer(serializers.ModelSerializer):
    user = PublicUserSerializer(read_only=True)

    class Meta:
        model = models.LendFeed
        fields = LEND_FIELDS
Exemplo n.º 10
0
class PostSerializer(serializers.ModelSerializer):
    author = PublicUserSerializer(default=serializers.CurrentUserDefault())

    class Meta:
        model = Post
        fields = ('id', 'message', 'timestamp', 'author')
Exemplo n.º 11
0
class PlaceNameDetailSerializer(serializers.ModelSerializer):
    medias = MediaLightSerializer(many=True, read_only=True)
    creator = PublicUserSerializer(read_only=True)
    community = serializers.PrimaryKeyRelatedField(
        queryset=Community.objects.all(), allow_null=True, required=False)
    language = serializers.PrimaryKeyRelatedField(
        queryset=Language.objects.all(), allow_null=True, required=False)
    favourites = FavouritePlaceNameSerializer(many=True, read_only=True)
    audio = serializers.PrimaryKeyRelatedField(
        queryset=Recording.objects.all(), allow_null=True, required=False)
    audio_obj = RecordingSerializer(source="audio", read_only=True)
    public_arts = RelatedPlaceNameSerializer(many=True, read_only=True)
    related_data = RelatedDataSerializer(many=True, required=False)
    grants = GrantSerializer(many=True, read_only=True)

    # Primary Key Related fields -> could be updated by passing a list of ids
    artists = serializers.PrimaryKeyRelatedField(
        queryset=PlaceName.objects.filter(kind='artist'),
        many=True,
        required=False)
    taxonomies = serializers.PrimaryKeyRelatedField(
        queryset=Taxonomy.objects.all(), many=True, required=False)

    def create(self, validated_data):
        # If related_data is included in the payload, pop it first
        related_data = validated_data.pop('related_data', [])
        artists = validated_data.pop('artists', [])
        taxonomies = validated_data.pop('taxonomies', [])

        # Save the PlaceName without a related_data
        placename = PlaceName.objects.create(**validated_data)

        # Save all related data one by one if they were added in the payload
        if related_data:
            for data in related_data:
                RelatedData.objects.create(**data)

        if artists:
            for artist in artists:
                PublicArtArtist.objects.create(public_art=placename,
                                               artist=artist)

        if taxonomies:
            for taxonomy in taxonomies:
                PlaceNameTaxonomy.objects.create(placename=placename,
                                                 taxonomy=taxonomy)

        return placename

    def update(self, instance, validated_data):
        # If the instance already has related_data, we must first delete them
        if 'related_data' in validated_data:
            RelatedData.objects.filter(placename__id=instance.id).delete()

        # If related_data is included in the payload, pop it first
        related_data = validated_data.pop('related_data', [])

        # Update all the other properties in the validated_data
        placename = super().update(instance, validated_data)

        # Save all related data one by one if they were added in the payload
        if len(related_data) > 0:
            for data in related_data:
                data['placename'] = placename
                RelatedData.objects.create(**data)

        return placename

    def to_representation(self, instance):
        # Get original representation
        representation = super(PlaceNameDetailSerializer,
                               self).to_representation(instance)

        # Alter representation for taxonomies
        # From list of ids -> to list of Taxonomy dictionaries
        taxonomies_representation = []
        taxonomies = representation.get('taxonomies')
        for taxonomy_id in taxonomies:
            curr_taxonomy = Taxonomy.objects.get(pk=taxonomy_id)
            serializer = TaxonomySerializer(curr_taxonomy)
            taxonomies_representation.append(serializer.data)
        representation['taxonomies'] = taxonomies_representation

        # Alter representation for taxonomies
        # From list of ids -> to list of PlaceName dictionaries
        artists_representation = []
        artists = representation.get('artists')
        for artist_id in artists:
            curr_artist = PlaceName.objects.get(pk=artist_id)
            serializer = RelatedPlaceNameSerializer(curr_artist)
            artists_representation.append(serializer.data)
        representation['artists'] = artists_representation

        return representation

    class Meta:
        model = PlaceName
        fields = ("name", "id", "geom", "image", "other_names", "audio_file",
                  "audio", "audio_obj", "kind", "common_name",
                  "community_only", "description", "status", "status_reason",
                  "medias", "community", "other_community", "language",
                  "non_bc_languages", "creator", "favourites", "taxonomies",
                  "public_arts", "artists", "related_data", "created",
                  "grants")
        depth = 1