merge endpoints Track/TrackRow to Album && create full crud -> Album && clear database
parent
1c84adcbda
commit
344f71295c
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -1,11 +1,78 @@
|
|||
from django.db import models
|
||||
from account.models import Account
|
||||
|
||||
from portfolio.account.models import Account
|
||||
|
||||
|
||||
class Album(models.Model):
|
||||
class OneToManyModel(models.Model):
|
||||
|
||||
def fromDict(self, dict):
|
||||
self.__dict__.update(dict)
|
||||
|
||||
def create(self, dict):
|
||||
new_object = self()
|
||||
new_object.fromDict(dict)
|
||||
new_object.save()
|
||||
return new_object
|
||||
|
||||
def update(self, dict):
|
||||
self.fromDict(dict)
|
||||
self.save()
|
||||
return self
|
||||
|
||||
class Meta:
|
||||
abstract = True
|
||||
|
||||
|
||||
class Album(OneToManyModel):
|
||||
title = models.CharField(max_length=255)
|
||||
description = models.CharField(max_length=255)
|
||||
image = models.TextField()
|
||||
url_code = models.CharField(max_length=255)
|
||||
user = models.ManyToManyField(Account)
|
||||
user = models.ForeignKey(Account, on_delete=models.DO_NOTHING)
|
||||
|
||||
|
||||
class Track(OneToManyModel):
|
||||
title = models.CharField(max_length=255)
|
||||
description = models.CharField(max_length=1000)
|
||||
text = models.TextField()
|
||||
image = models.TextField()
|
||||
audio = models.TextField()
|
||||
url_code = models.CharField(max_length=255)
|
||||
album = models.ForeignKey(Album, on_delete=models.CASCADE)
|
||||
user = models.ForeignKey(Account, on_delete=models.CASCADE)
|
||||
|
||||
|
||||
class TrackRow(OneToManyModel):
|
||||
row_number = models.IntegerField()
|
||||
group = models.BooleanField()
|
||||
leader = models.BooleanField()
|
||||
link = models.IntegerField(default=None)
|
||||
text = models.TextField(default=None)
|
||||
description = models.TextField(default=None)
|
||||
image = models.TextField(default=None)
|
||||
track = models.ForeignKey(Track, on_delete=models.CASCADE)
|
||||
|
||||
def toDict(self):
|
||||
if self.link is not None:
|
||||
return {
|
||||
self.row_number: {
|
||||
'group': self.gruop,
|
||||
'leader': self.leader,
|
||||
'link': self.link,
|
||||
'text': self.text,
|
||||
'description': None,
|
||||
'image': None
|
||||
}
|
||||
}
|
||||
else:
|
||||
return {
|
||||
self.row_number: {
|
||||
'group': self.gruop,
|
||||
'leader': self.leader,
|
||||
'link': None,
|
||||
'text': None,
|
||||
'description': self.description,
|
||||
'image': self.image
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,135 @@
|
|||
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(instance, 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']
|
||||
|
|
@ -1,3 +1,23 @@
|
|||
from django.shortcuts import render
|
||||
|
||||
# Create your views here.
|
||||
from rest_framework import viewsets
|
||||
|
||||
from drf_yasg.utils import swagger_auto_schema
|
||||
|
||||
from .models import *
|
||||
from .serializers import *
|
||||
|
||||
|
||||
class TrackViewSet(viewsets.ModelViewSet):
|
||||
queryset = Track.objects.all()
|
||||
serializer_class = TrackSerializer
|
||||
|
||||
|
||||
class TrackRowViewSet(viewsets.ModelViewSet):
|
||||
queryset = TrackRow.objects.all()
|
||||
serializer_class = TrackRowSerializer
|
||||
|
||||
|
||||
class AlbumViewSet(viewsets.ModelViewSet):
|
||||
queryset = Album.objects.all()
|
||||
serializer_class = AlbumSerializer
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
# Generated by Django 3.0.7 on 2020-06-18 17:25
|
||||
# Generated by Django 3.0.7 on 2020-06-20 22:48
|
||||
|
||||
from django.conf import settings
|
||||
import django.contrib.auth.models
|
||||
|
|
@ -33,6 +33,20 @@ class Migration(migrations.Migration):
|
|||
('objects', django.contrib.auth.models.UserManager()),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Album',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('title', models.CharField(max_length=255)),
|
||||
('description', models.CharField(max_length=255)),
|
||||
('image', models.TextField()),
|
||||
('url_code', models.CharField(max_length=255)),
|
||||
('user', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='portfolio.Account')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Guest',
|
||||
fields=[
|
||||
|
|
@ -45,4 +59,38 @@ class Migration(migrations.Migration):
|
|||
'abstract': False,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Track',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('title', models.CharField(max_length=255)),
|
||||
('description', models.CharField(max_length=1000)),
|
||||
('text', models.TextField()),
|
||||
('image', models.TextField()),
|
||||
('audio', models.TextField()),
|
||||
('url_code', models.CharField(max_length=255)),
|
||||
('album', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='portfolio.Album')),
|
||||
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='portfolio.Account')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='TrackRow',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('row_number', models.IntegerField()),
|
||||
('group', models.BooleanField()),
|
||||
('leader', models.BooleanField()),
|
||||
('link', models.IntegerField(default=None)),
|
||||
('text', models.TextField(default=None)),
|
||||
('description', models.TextField(default=None)),
|
||||
('image', models.TextField(default=None)),
|
||||
('track', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='portfolio.Track')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
]
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -1,3 +0,0 @@
|
|||
from django.contrib import admin
|
||||
|
||||
# Register your models here.
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class SongConfig(AppConfig):
|
||||
name = 'song'
|
||||
|
|
@ -1,45 +0,0 @@
|
|||
from django.db import models
|
||||
|
||||
from account.models import Account
|
||||
from album.models import Album
|
||||
|
||||
class Song(models.Model):
|
||||
title = models.CharField(max_length=255)
|
||||
description = models.CharField(max_length=1000)
|
||||
text = models.TextField()
|
||||
image = models.TextField()
|
||||
audio = models.TextField()
|
||||
url_code = models.CharField(max_length=255)
|
||||
album = models.ForeignKey(Album, on_delete=models.CASCADE)
|
||||
user = models.ForeignKey(Account, on_delete=models.CASCADE)
|
||||
|
||||
class SongRow(models.Model):
|
||||
rowNumber = models.IntegerField()
|
||||
gruop = models.BooleanField()
|
||||
leader = models.BooleanField()
|
||||
link = models.IntegerField(default=None)
|
||||
text = models.TextField()
|
||||
description = models.TextField()
|
||||
image = models.TextField()
|
||||
song = models.ForeignKey(Song, on_delete=models.CASCADE)
|
||||
|
||||
def toDict(self):
|
||||
if self.link is not None:
|
||||
return {
|
||||
self.rowNumber: {
|
||||
'group': self.gruop,
|
||||
'leader': self.leader,
|
||||
'link': self.link,
|
||||
'text': self.text,
|
||||
}
|
||||
}
|
||||
else:
|
||||
return {
|
||||
self.rowNumber: {
|
||||
'group': self.gruop,
|
||||
'leader': self.leader,
|
||||
'text': self.text,
|
||||
'description': self.description,
|
||||
'image': self.image
|
||||
}
|
||||
}
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
from django.shortcuts import render
|
||||
|
||||
# Create your views here.
|
||||
|
|
@ -22,7 +22,8 @@ from rest_framework import routers, permissions
|
|||
from rest_framework.authtoken import views as authViews
|
||||
|
||||
from portfolio import settings
|
||||
from .account import views
|
||||
from .account.views import GuestViewSet, AccountViewSet, AccountAuth
|
||||
from .album.views import AlbumViewSet, TrackViewSet, TrackRowViewSet
|
||||
|
||||
schema_view = get_schema_view(
|
||||
openapi.Info(
|
||||
|
|
@ -38,19 +39,23 @@ schema_view = get_schema_view(
|
|||
|
||||
|
||||
router = routers.DefaultRouter()
|
||||
router.register(r'users', views.AccountViewSet, basename='user')
|
||||
router.register(r'guests', views.GuestViewSet)
|
||||
router.register(r'user', AccountViewSet, basename='user')
|
||||
router.register(r'guest', GuestViewSet, basename='guest')
|
||||
|
||||
router.register(r'album', AlbumViewSet, basename='album')
|
||||
router.register(r'track', TrackViewSet, basename='track')
|
||||
router.register(r'track-row', TrackRowViewSet, basename='track row')
|
||||
|
||||
urlpatterns = [
|
||||
path('admin/', admin.site.urls),
|
||||
path('', include(router.urls)),
|
||||
re_path(r'users/auth', views.AccountAuth.as_view())
|
||||
re_path(r'user/auth', AccountAuth.as_view())
|
||||
]
|
||||
|
||||
if settings.DEBUG:
|
||||
urlpatterns = [
|
||||
path('admin/', admin.site.urls),
|
||||
path('', include(router.urls)),
|
||||
re_path(r'users/auth', views.AccountAuth.as_view()),
|
||||
re_path(r'user/auth', AccountAuth.as_view()),
|
||||
path('swagger/', schema_view.with_ui('swagger', cache_timeout=0))
|
||||
]
|
||||
Loading…
Reference in New Issue