from django.db import models
from django.utils.translation import gettext_lazy as _
# Create your models here.
class AlbumType(models.Model):
album_name = models.CharField(max_length=100)
type = models.CharField(max_length=100)
class Meta:
ordering = ['album_name']
verbose_name_plural = 'Album Type'
def __str__(self):
return str(self.album_name)
class Album(models.Model):
album_name = models.ForeignKey(AlbumType, verbose_name=_("Album Type"), on_delete=models.CASCADE)
artist = models.CharField(max_length=100)
class Meta:
ordering = ['album_name']
verbose_name_plural = 'Album'
def __str__(self):
return str(self.album_name)
class Track(models.Model):
album = models.ForeignKey(Album, verbose_name=_("Album"), on_delete=models.CASCADE)
order = models.IntegerField()
title = models.CharField(max_length=100)
duration = models.IntegerField()
class Meta:
verbose_name_plural = 'Track'
# unique_together = ['album', 'order']
ordering = ['order']
def __str__(self):
return '%d: %s' % (self.order, self.title)
Serializer
from rest_framework import serializers
from .models import *
class AlbumTypeSerializer(serializers.ModelSerializer):
class Meta:
model = AlbumType
fields = '__all__'
class AlbumSerializer(serializers.ModelSerializer):
album_name = serializers.StringRelatedField(many=True)
class Meta:
model = Album
fields = '__all__'
class TrackSerializer(serializers.ModelSerializer):
album = serializers.SlugRelatedField(
queryset=Album.objects.all(),
slug_field='album_name'
)
class Meta:
model = Track
fields = '__all__'
View
from django.shortcuts import render
from rest_framework import viewsets
from .models import *
from .pollSerializer import *
class AlbumType_Viewsets(viewsets.ModelViewSet):
queryset = AlbumType.objects.all()
serializer_class = AlbumTypeSerializer
class Track_Viewsets(viewsets.ModelViewSet):
queryset = Track.objects.all()
serializer_class = TrackSerializer
class Album_Viewsets(viewsets.ModelViewSet):
# queryset = Album.objects.all()
serializer_class = AlbumSerializer
def get_queryset(self):
return Album.objects.all().filter(album__album_name=self.request.user)[:1]
POST
{
"album": "The Eye",
"order": 1,
"title": "New Me",
"duration": 3
}
Error
{
"album": [
"Invalid value."
]
}