我与这些实体存在多对多关系:
class Playlist(models.Model):
videos = models.ManyToManyField("Video")
class Video(models.Model):
pass
我需要第三个模型来用这两个实体的外键替换 M2M 关系,而无需实际修改我们访问和查询播放列表视频的方式 PlayList().videos
,这将把我们带入代码重构 hell 。
这是第三种关系:
class PlaylistVideos(models.Model):
playlist = models.ForeignKey('PlayList')
video = models.ForeignKey('Video')
new_field = models.IntegerField()
#... other stuff
总而言之,我想要一个别名属性之类的东西,以便轻松访问特定播放列表的视频,有什么建议吗?
最佳答案
您可以使用直通表:
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
指定一个值。
关于python - Django 在多对多关系模型中轻松检索项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36658105/