【发布时间】:2017-09-11 11:24:17
【问题描述】:
这是我的播放列表和歌曲模型:
models.py
class Song(models.Model):
song_title = models.CharField(max_length=200, null=False, blank=False)
def __str__(self):
return self.song_title
class Playlist(models.Model):
name = models.CharField(max_length=200, null=False, blank=False,default='')
songs = models.ManyToManyField('Song')
def __str__(self):
return self.name
@property
def playlist_id(self):
return self.id
这是我的模板:
<div class="dropdown">
<button class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown">Add to playlist<span class="caret"></span></button>
<ul class="dropdown-menu">
{% for playlist in all_playlists %}
<li><button onclick="{{playlist.songs.add(song)}}">{{playlist.name}}</button></li>
{% endfor %}
</ul>
</div>
当用户单击“添加到播放列表”下拉按钮时,它会显示播放列表的下拉列表。但我想要的是当用户点击播放列表时,歌曲应该被添加到播放列表的歌曲字段中。为此,我创建了一个带有 action = playlists.songs.add(song) 的按钮。当我渲染它时,它返回了这个错误:
无法解析剩余部分:“(歌曲)”来自 'playlist.songs.add(song)'
所以我启动了 django shell,然后输入了同样的内容,它在 shell 中有效,但在模板中无效。这是我的 shell 日志。
In [1]: from music.models import Song, Playlist
In [2]: s = Song.objects.get(pk=2)
In [3]: p1 = Playlist.objects.get(pk=2)
In [4]: p1.songs.add(s)
In [5]: p1.songs.all()
Out[5]: [<Song: Shape of you>]
非常感谢您的帮助。
【问题讨论】:
-
为
onclick事件编写的代码将在客户端调用,您无法在浏览器中执行python。您可以编写 javascript 向服务器发送 HTTP 请求以将歌曲添加到播放列表,也可以使用 django 表单。 -
我如何在 django 中做到这一点?