在django中制作简单可订购播放列表的最佳方法

0at*_*man 2 django orm jquery json playlist

简单的django orm问题:

我有一个非常经典的播放列表和曲目模型示例:

class Track(models.Model):
    name = models.CharField(max_length = 50)
    mp3 =  models.FileField(upload_to="track/")

class Playlist(models.Model):
    name = models.CharField(max_length = 50)

class PlaylistTrack(models.Model):
    playlist = models.ForeignKey('track.Playlist')
    track =    models.ForeignKey('track.Track')
    position = models.IntegerField() #Here's the crux of the problem
Run Code Online (Sandbox Code Playgroud)

这是制作可订购播放列表的最佳方式吗?

我对此表示怀疑,但如果是这样,我如何获得订购QuerySet?(我将序列化为json,所以a QuerySet是首选,但如果你有一个不同的,简单的方式制作json,我很乐意听到它!)

这是我到目前为止所拥有的:

playlist = Track.objects.filter(playlisttrack__playlist__exact=1)
Run Code Online (Sandbox Code Playgroud)

但根据PlaylistTrack.position现场情况,这并没有保留排序......

谢谢!

Tom*_*ski 5

如果你注意到你的PlaylistTrack模型只不过是一个多2对多的中间表,那么事情会变得更加明显(检查一下):

class Playlist(models.Model):
    name = models.CharField(max_length = 50)
    tracks = models.ManyToManyField('Track', through='PlaylistTrack')

class PlaylistTrack(models.Model):
    playlist = models.ForeignKey('track.Playlist')
    track =    models.ForeignKey('track.Track')
    position = models.IntegerField() #Here's the crux of the problem

    class Meta:
        ordering = ['position']
Run Code Online (Sandbox Code Playgroud)

现在你可以这样做:

my_playlist.tracks.all()
Run Code Online (Sandbox Code Playgroud)