在我的应用程序中,我想确定对象之间的相似性。 这些对象有几个ManyToMany字段,并且该列表中匹配值的数量将指示相似性。 (例如,如果一首歌曲具有很多常见的艺术家,流派或制作人,则可能会与另一首相似)
class Song:
genres = models.ManyToManyField(Genre)
artists = models.ManyToManyField(Artist)
producers = models.ManyToManyField(Producer)
我可以想象很多比较这些字段的可能方法会非常慢,因为它们在比较之前会加载ManyToMany字段的所有对象。 有没有一种快速的方法可以根据ID来计算匹配数?
我当前的检查方式是:
in_common = len(set(song_one.genres.all()) & set(song_two.genres.all()))