views.py 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. # Create your views here.
  2. from django.shortcuts import render, get_object_or_404, redirect
  3. from django.contrib.auth.decorators import login_required
  4. from .models import Artista, Album, Song
  5. from .forms import ArtistaForm, AlbumForm, SongForm
  6. import logging
  7. logger = logging.getLogger(__name__)
  8. @login_required
  9. def principal(request):
  10. artistas = Artista.objects.all()
  11. albumes = Album.objects.all()
  12. return render(request, 'lyrics/index.html', {'artistas': artistas, 'albumes': albumes})
  13. #########################
  14. # Vistas para los artistas
  15. @login_required
  16. def lista_artistas(request):
  17. artistas = Artista.objects.all()
  18. return render(request, 'lyrics/lista_artistas.html', {'artistas': artistas})
  19. @login_required
  20. def detalle_artista(request, artista_id):
  21. artista = get_object_or_404(Artista, pk=artista_id)
  22. albumes = Album.objects.filter(artist=artista_id)
  23. return render(request, 'lyrics/detalle_artista.html', {'artista': artista, 'albumes': albumes})
  24. @login_required
  25. def nuevo_artista(request):
  26. if request.method == 'POST':
  27. form = ArtistaForm(request.POST, request.FILES)
  28. if form.is_valid():
  29. form.save()
  30. return redirect('lyrics:lista_artistas')
  31. else:
  32. form = ArtistaForm()
  33. return render(request, 'lyrics/form_artista.html', {'form': form})
  34. @login_required
  35. def editar_artista(request, artista_id):
  36. artista = get_object_or_404(Artista, pk=artista_id)
  37. if request.method == 'POST':
  38. form = ArtistaForm(request.POST, request.FILES, instance=artista)
  39. if form.is_valid():
  40. form.save()
  41. return redirect('lyrics:lista_artistas')
  42. else:
  43. form = ArtistaForm(instance=artista)
  44. return render(request, 'lyrics/form_artista.html', {'form': form})
  45. @login_required
  46. def eliminar_artista(request, artista_id):
  47. artista = get_object_or_404(Artista, pk=artista_id)
  48. artista.delete()
  49. return redirect('lyrics:lista_artistas')
  50. #########################
  51. # Vistas para los albumes
  52. @login_required
  53. def lista_albumes(request):
  54. albumes = Album.objects.all()
  55. return render(request, 'lyrics/lista_albumes.html', {'albumes': albumes})
  56. @login_required
  57. def detalle_album(request, album_id):
  58. album = get_object_or_404(Album, pk=album_id)
  59. songs = Song.objects.filter(album_id=album_id)
  60. return render(request, 'lyrics/detalle_album.html', {'album': album, 'songs': songs})
  61. @login_required
  62. def nuevo_album(request):
  63. artistas = Artista.objects.all() # vamos a ver si hay vehículos dados de alta
  64. if artistas:
  65. if request.method == 'POST':
  66. form = AlbumForm(request.POST, request.FILES)
  67. if form.is_valid():
  68. form.save()
  69. return redirect('lyrics:lista_albumes')
  70. else:
  71. form = AlbumForm()
  72. return render(request, 'lyrics/form_album.html', {'form': form})
  73. else:
  74. return render(request, 'lyrics/index.html')
  75. @login_required
  76. def editar_album(request, album_id):
  77. album = get_object_or_404(Album, pk=album_id)
  78. if request.method == 'POST':
  79. form = AlbumForm(request.POST, request.FILES, instance=album)
  80. if form.is_valid():
  81. form.save()
  82. return redirect('lyrics:lista_albumes')
  83. else:
  84. form = AlbumForm(instance=album)
  85. return render(request, 'lyrics/form_album.html', {'form': form})
  86. @login_required
  87. def eliminar_album(request, album_id):
  88. album = Album.objects.get(pk=album_id)
  89. album.delete()
  90. return redirect('lyrics:lista_albumes')
  91. #########################
  92. # Vistas para los songs
  93. @login_required
  94. def lista_songs(request):
  95. songs = Song.objects.all()
  96. return render(request, 'lyrics/lista_songs.html', {'songs': songs})
  97. @login_required
  98. def detalle_song(request, song_id):
  99. song = get_object_or_404(Song, pk=song_id)
  100. albumes = Album.objects.filter(song=song_id)
  101. return render(request, 'lyrics/detalle_song.html', {'song': song, 'albumes': albumes})
  102. @login_required
  103. def nuevo_song(request):
  104. album_id = request.GET.get('album_id') # Obtener el album_id de los parámetros de la URL
  105. if request.method == 'POST':
  106. form = SongForm(request.POST, request.FILES)
  107. if form.is_valid():
  108. album = form.cleaned_data['album']
  109. song_count = album.song.count()
  110. nueva_cancion = form.save(commit=False)
  111. nueva_cancion.pista = song_count + 1
  112. nueva_cancion.save()
  113. logger.info("Canción creada %s", nueva_cancion.title)
  114. return redirect('lyrics:lista_songs')
  115. else:
  116. if album_id:
  117. # Si tenemos un album_id, preseleccionamos ese álbum en el formulario
  118. album = get_object_or_404(Album, id=album_id)
  119. form = SongForm(initial={'album': album, 'artist': album.artist, 'year': album.year})
  120. else:
  121. form = SongForm()
  122. return render(request, 'lyrics/form_song.html', {'form': form})
  123. @login_required
  124. def editar_song(request, song_id):
  125. song = get_object_or_404(Song, pk=song_id)
  126. if request.method == 'POST':
  127. form = SongForm(request.POST, request.FILES, instance=song)
  128. if form.is_valid():
  129. form.save()
  130. return redirect('lyrics:lista_songs')
  131. else:
  132. form = SongForm(instance=song)
  133. return render(request, 'lyrics/form_song.html', {'form': form})
  134. @login_required
  135. def eliminar_song(request, song_id):
  136. song = get_object_or_404(Song, pk=song_id)
  137. song.delete()
  138. return redirect('lyrics:lista_songs')