123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- from furl import furl
- from rest_framework import serializers
- from rest_framework.reverse import reverse as drf_reverse
- from .fields import UUIDHyperlinkedIdentityField
- from .models import Album, Artist, Track
- class TrackAlbumArtistSerializer(serializers.ModelSerializer):
- uuid = serializers.ReadOnlyField()
- url = UUIDHyperlinkedIdentityField(view_name="artist-detail")
- class Meta:
- model = Artist
- fields = ("uuid", "url", "name")
- class TrackAlbumSerializer(serializers.ModelSerializer):
- uuid = serializers.ReadOnlyField()
- url = UUIDHyperlinkedIdentityField(view_name="album-detail")
- artist = TrackAlbumArtistSerializer()
- class Meta:
- model = Album
- fields = ("uuid", "url", "name", "artist")
- class TrackSerializer(serializers.ModelSerializer):
- uuid = serializers.ReadOnlyField()
- url = UUIDHyperlinkedIdentityField(view_name="track-detail")
- album = TrackAlbumSerializer()
- class Meta:
- model = Track
- fields = ("uuid", "url", "name", "number", "album")
- class AlbumTrackSerializer(TrackSerializer):
- uuid = serializers.ReadOnlyField()
- url = UUIDHyperlinkedIdentityField(view_name="track-detail")
- class Meta:
- model = Track
- fields = ("uuid", "url", "name", "number")
- class AlbumArtistSerializer(serializers.ModelSerializer):
- uuid = serializers.ReadOnlyField()
- url = UUIDHyperlinkedIdentityField(view_name="artist-detail")
- class Meta:
- model = Artist
- fields = ("uuid", "url", "name")
- class AlbumSerializer(serializers.ModelSerializer):
- uuid = serializers.ReadOnlyField()
- url = UUIDHyperlinkedIdentityField(view_name="album-detail")
- artist = AlbumArtistSerializer()
- tracks = AlbumTrackSerializer(many=True)
- class Meta:
- model = Album
- fields = ("uuid", "url", "name", "year", "artist", "tracks")
- class ArtistSerializer(serializers.ModelSerializer):
- uuid = serializers.ReadOnlyField()
- url = UUIDHyperlinkedIdentityField(view_name="artist-detail")
- albums_url = serializers.SerializerMethodField()
- class Meta:
- model = Artist
- fields = ("uuid", "url", "name", "albums_url")
- def get_albums_url(self, artist):
- path = drf_reverse("album-list", request=self.context["request"])
- return furl(path).set({"artist_uuid": artist.uuid}).url
|