diff --git a/teleband/musics/api/serializers.py b/teleband/musics/api/serializers.py index ea39d8e..05c386b 100644 --- a/teleband/musics/api/serializers.py +++ b/teleband/musics/api/serializers.py @@ -1,8 +1,9 @@ from rest_framework import serializers -from teleband.musics.models import Piece, Part, PartTransposition, Composer, PartType - -from teleband.musics.models import PartTransposition, EnsembleType +from teleband.musics.models import ( + Piece, Part, PartTransposition, Composer, PartType, + PartInstrumentSample, EnsembleType +) from teleband.instruments.models import Transposition from teleband.utils.serializers import GenericNameSerializer @@ -45,9 +46,16 @@ class Meta: fields = ["part", "transposition", "flatio"] +class PartInstrumentSampleSerializer(serializers.ModelSerializer): + class Meta: + model = PartInstrumentSample + fields = ['id', 'part', 'instrument', 'sample_audio'] + + class PartSerializer(serializers.ModelSerializer): piece = PieceSerializer() transpositions = PartTranspositionSimpleSerializer(many=True) + instrument_samples = PartInstrumentSampleSerializer(many=True) class Meta: model = Part @@ -57,6 +65,7 @@ class Meta: "transpositions", "sample_audio", "chord_scale_pattern", + "instrument_samples", ] diff --git a/teleband/musics/models.py b/teleband/musics/models.py index cd6effa..8d1a602 100644 --- a/teleband/musics/models.py +++ b/teleband/musics/models.py @@ -93,3 +93,17 @@ class Meta: def __str__(self): return f"{self.part.piece}: {self.part} [{self.transposition}]" + + +class PartInstrumentSample(models.Model): + part = models.ForeignKey(Part, related_name="instrument_samples", on_delete=models.PROTECT) + instrument = models.ForeignKey('instruments.Instrument', on_delete=models.PROTECT) + sample_audio = models.FileField(upload_to="instrument_samples/") + + class Meta: + unique_together = ['part', 'instrument'] + verbose_name = "Part Instrument Sample" + verbose_name_plural = "Part Instrument Samples" + + def __str__(self): + return f"{self.part} - {self.instrument} Sample"