From e9891bf9551c4fe43f4e988dbfa4cee8a06fd318 Mon Sep 17 00:00:00 2001 From: "Zamua Nasrawt (aider)" Date: Fri, 25 Oct 2024 00:03:17 -0400 Subject: [PATCH] feat: Add PartInstrumentSample model and serializer --- teleband/musics/api/serializers.py | 15 ++++++++++++--- teleband/musics/models.py | 14 ++++++++++++++ 2 files changed, 26 insertions(+), 3 deletions(-) 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"