简单的django问题:
我有一个非常典型的播放列表和曲目模型示例:
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
这是制作可订购播放列表的最佳方式吗?
我对此表示怀疑,但如果是这样,我如何获得有序的QuerySet
? (我将序列化为json,所以首选QuerySet
,但如果你有一个不同的,简单的方式制作json,我很乐意听到它!)
这是我到目前为止所拥有的:
playlist = Track.objects.filter(playlisttrack__playlist__exact=1)
但根据PlaylistTrack.position
字段......
谢谢!
答案 0 :(得分:5)
如果你注意到你的 PlaylistTrack 模型只不过是一个多2对多的中间表,那么事情就会变得更加明显(检查this):
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']
现在你可以这样做:
my_playlist.tracks.all()
答案 1 :(得分:2)
如果您担心的订单只是在查询结尾添加order_by
子句。
playlist = Track.objects.filter(playlisttrack__playlist__exact=1).order_by('+playlisttrack__position')
简单地将结果集转储到json:
json_serializer = serializers.get_serializer("json")()
json_serializer.serialize(playlist, ensure_ascii=False, stream=response)