不显示 Django 音乐应用程序的播放列表列表

问题描述 投票:0回答:1

我正在制作一个音乐流媒体网站,我试图在 中显示用户的播放列表列表,但我总是发现用户没有播放列表(但数据库中有用户的播放列表)。问题是什么?也许播放列表视图不正确?

html:

<div id="divId">
    {% if myPlaylists %}
        <p style="margin: 5px; font-size: 0.75rem; font-weight: 700; color: rgb(138, 138, 138); text-align: left;">Add This Song To Your Playlist</p>
    {% for playlist in myPlaylists %}
        <a class="left-panel-btn" id="D_{{playlist.playlist_id}}" onclick="sendPostRequestPlaylistSong(this)">{{playlistInfo.playlist_name}}</a><br>
    {% endfor %}
    {% else %}
        <p style="margin: 5px; font-size: 0.8rem; font-weight: 700; color: rgb(138, 138, 138); text-align: left;">You don't have any Playlist.</p>
        <a class="create-p" onclick="$('#divId').css({display: 'none'}); document.getElementById('modal-wrapper-playlist').style.display='block'"><i class="fas fa-plus"></i> Create Playlist</a>
    {% endif %}
</div>

models.py:

class Song(models.Model):
song_id = models.AutoField(primary_key=True)
name = models.CharField(max_length=50)
artist = models.CharField(max_length=50)
album = models.CharField(max_length=50, blank=True)
genre = models.CharField(max_length=20, blank=True, default='Album')
song = models.FileField(upload_to="songs/", validators=[FileExtensionValidator(allowed_extensions=['mp3', 'wav'])], default="name")
image = models.ImageField(upload_to="songimage/", validators=[FileExtensionValidator(allowed_extensions=['jpeg', 'jpg', 'png'])], default="https://placehold.co/300x300/png")
data = models.DateTimeField(auto_now=False, auto_now_add=True)
slug = models.SlugField()

def __str__(self):
    return self.name

class Meta:
    ordering = ['name']

class Playlist(models.Model):
    playlist_id = models.AutoField(primary_key=True)
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    playlist_name = models.CharField(max_length=50, default="name")
    image = models.ImageField(upload_to="playlist_images/", validators=[FileExtensionValidator(allowed_extensions=['jpeg', 'jpg', 'png'])], default="media/images/music-placeholder.png")
    plays = models.IntegerField(default=0)
    songs = models.ManyToManyField(Song, related_name='playlist')
    slug = models.SlugField()

    def __str__(self):
        return self.playlist_name

views.py:

def playlist(request, playlist_id):
user = request.user
if user.is_authenticated:
    myPlaylists = Playlist.objects.filter(user=user)
    if request.method == "POST":
        song_id = request.POST["music_id"]
        playlist = Playlist.objects.filter(playlist_id=playlist_id).first()
        if song_id in playlist.songs.all():
            playlist.songs.remove(song_id)
            playlist.plays -= 1
            playlist.save()
        message = "Successfull"
        print(message)
        return HttpResponse(json.dumps({'message': message}))
    else:
        images = os.listdir("media/playlist_images")
        print(images)
        currPlaylist = Playlist.objects.filter(playlist_id=playlist_id).first()
        songs = currPlaylist.songs
        playlistSongs = [currPlaylist.songs.all()]
        recommendedSingers = []

        return render(request, "music/playlist.html", {'playlistInfo': currPlaylist,
                                                       'playlistSongs': playlistSongs,
                                                       'myPlaylists': myPlaylists,
                                                       'recommendedSingers': recommendedSingers})
html django backend
1个回答
0
投票

没有调试就很难回答。 请为已存在播放列表的用户提供这些代码的打印结果:

# in your playlist view
myPlaylists = Playlist.objects.filter(user=user)
# put those two lines
print(myPlaylists.query.__str__())
print(myPlaylists.count())

顺便说一句 - 你的模板有错误:

{% for playlist in myPlaylists %}
    <a class="left-panel-btn" id="D_{{playlist.playlist_id}}" onclick="sendPostRequestPlaylistSong(this)">
        {{playlistInfo.playlist_name}} {# it should be playlist.playlist_name #}
     </a><br>
{% endfor %}
© www.soinside.com 2019 - 2024. All rights reserved.