music.service.backend/portfolio/album/serializers.py

136 lines
4.2 KiB
Python
Executable File

from rest_framework import serializers
from rest_framework.reverse import reverse
from .models import *
class TrackRowSerializer(serializers.ModelSerializer):
id = serializers.IntegerField(read_only = True)
track_id = serializers.IntegerField()
row_number = serializers.IntegerField()
group = serializers.BooleanField()
leader = serializers.BooleanField()
link = serializers.IntegerField()
text = serializers.CharField()
description = serializers.CharField()
image = serializers.CharField()
def create(self, validated_data):
return TrackRow.create(TrackRow, validated_data)
def update(self, instance, validated_data):
return instance.update(validated_data)
class Meta:
model = TrackRow
fields = ['id', 'track_id','row_number', 'group', 'leader', 'link', 'text', 'description', 'image']
class TrackSerializer(serializers.ModelSerializer):
id = serializers.IntegerField(read_only = True)
album_id = serializers.IntegerField()
user_id = serializers.IntegerField()
title = serializers.CharField(max_length=255)
description = serializers.CharField(max_length=1000)
text = serializers.CharField()
image = serializers.CharField()
audio = serializers.CharField()
url_code = serializers.CharField(max_length=255)
track_rows = TrackRowSerializer(many=True, read_only=True)
def create(self, validated_data):
return Track.create(Track, validated_data)
def update(self, instance, validated_data):
return instance.update(validated_data)
# track_rows = serializers.SlugRelatedField(
# many=True,
# read_only=True,
# slug_field='row_number'
# )
# view_name = 'track'
# queryset = Track.objects.all()
# def get_url(self, obj, view_name, request, format):
# url_kargs = {
# 'album_id': obj.album.id,
# 'id': obj.id
# }
# return reverse(view_name, kwargs=url_kargs, request=request, format=format)
# def get_object(self, view_name, view_args, view_kwargs):
# lookup_kwargs = {
# 'album_id': view_kwargs['album_id'],
# 'id': view_kwargs['id']
# }
# return self.get_queryset().get(**lookup_kwargs)
class Meta:
model = Track
fields = ['id', 'album_id', 'user_id', 'title', 'description', 'text', 'image', 'audio', 'url_code', 'track_rows']
class AlbumSerializer(serializers.ModelSerializer):
id = serializers.IntegerField(read_only = True)
user_id = serializers.IntegerField()
title = serializers.CharField(max_length=255)
description = serializers.CharField(max_length=255)
image = serializers.CharField()
url_code = serializers.CharField(max_length=255)
tracks = TrackSerializer(many=True, read_only=True)
def create(self, validated_data):
return Album.create(Album, validated_data)
def update(self, instance, validated_data):
return Album.update(validated_data)
class Meta:
model = Album
fields = ['id', 'user_id', 'title', 'description', 'image', 'url_code', 'tracks']
# Relations
# class TrackTrackRowRelation(serializers.RelatedField):
# def to_representation(self, value):
# serializer = TrackSerializer(value.get_queryset()[0])
# return serializer.data
# class AlbumTrackRelation(serializers.RelatedField):
# def to_representation(self, value):
# serializer = AlbumSerializer(value.get_queryset()[0])
# return serializer.data
# class TrackRowSerializerFull(TrackRowSerializer):
# """
# TrackRow + Track id
# """
# track_id = TrackTrackRowRelation(queryset=Track.objects.all())
# class Meta:
# model = TrackRow
# fields = ['id', 'track_id', 'row_number', 'group', 'leader', 'link', 'text', 'description', 'image']
# class TrackSerializerFull(TrackSerializer):
# """
# Track + Album id
# """
# album_id = AlbumTrackRelation(queryset=Album.objects.all())
# def create(self, validated_data):
# return super().create(validated_data)
# class Meta:
# model = Track
# fields = ['id', 'album_id', 'title', 'description', 'text', 'image', 'audio', 'url_code', 'track_rows']