我与这些实体有多对多的关系:
class Playlist(models.Model):
videos = models.ManyToManyField("Video")
class Video(models.Model):
pass
我需要第三个模型用这个实体的外键替换M2M关系,而不需要修改我们访问和查询播放列表视频PlayList().videos
的方式,这会将我们带到代码重构地狱。
这是第三种关系:
class PlaylistVideos(models.Model):
playlist = models.ForeignKey('PlayList')
video = models.ForeignKey('Video')
new_field = models.IntegerField()
#... other stuff
总结一下,我想像别名属性一样轻松访问特定播放列表的视频,有什么建议吗?
答案 0 :(得分:1)
您可以使用直通表:
class Playlist(models.Model):
videos = models.ManyToManyField("Video", through="PlaylistVideos")
记录在案here。您仍然可以将视频作为playlist.videos
访问,但它会生成多个查询,因此效率会低于以前。这在How do I make Django ManyToMany 'through' queries more efficient?中讨论。您需要确定额外的查询是否会对您的应用程序产生重大影响。正如docs中所述,如果不使用PlaylistVideos
模型,您将无法将新视频添加到播放列表,因为您需要为new_field
指定一个值。