无法解析余数:'(歌曲)'来自' playlist.songs.add(歌曲)'

时间:2017-04-15 09:29:23

标签: python html django button

这是我的播放列表&歌曲模型:

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>

当用户点击下拉按钮&#39;添加到播放列表&#39;时,会显示播放列表的下拉列表。但我想要的是当用户点击播放列表时,歌曲应该被添加到播放列表的歌曲字段中。为此,我创建了一个action = playlists.songs.add(song)的按钮。当我渲染它时,它返回了这个错误:

  

无法解析余数:&#39;(歌曲)&#39;从   &#39; playlist.songs.add(歌曲)&#39;

所以我启动了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>]

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

这是其中一个解决方案。

  1. 使用适当的字段创建一个django form以供多项选择。使用POST方法在表单标记中将其插入模板中。

  2. 创建一个网址并查看以处理此POST请求。您可以编写代码以在此视图中将歌曲添加到播放列表。然后重新渲染模板。