Django-从反向模型中选择相关对象-例如反向选择相关对象
我有以下型号只是为了举例:Django-从反向模型中选择相关对象-例如反向选择相关对象,django,django-orm,Django,Django Orm,我有以下型号只是为了举例: class Song(models.Model): name = CharField() album = ForeignKey(Album, related_name='songs') class Album(models.Model): name = CharField() genre = ForeignKey(Genre, related_name ='albums') class Genre(models.Model):
class Song(models.Model):
name = CharField()
album = ForeignKey(Album, related_name='songs')
class Album(models.Model):
name = CharField()
genre = ForeignKey(Genre, related_name ='albums')
class Genre(models.Model):
name = CharField()
我正在寻找一种方法来获取与专辑相关的所有歌曲,这些歌曲与特定的过滤流派或流派相关,同时在DB中而不是内存中进行连接
我知道我可以使用select_related子句以另一种方式进行以下操作:
而且queryset已经包含了歌曲专辑中的所有类型属性,而不会再次点击DB
我的问题是如何以另一种方式解决这个问题:从一个特定的或过滤过的流派开始,让所有歌曲都拥有外键链。
Song.objects.select\u relatedalbum.filteralbum\u genre=genre\u YOU\u
你想要什么?对于普通外键,应该只使用一个查询。您可以使用过滤器获取与某一流派相关的所有歌曲:
genre = Genre.objects.get(name='pop')
songs_in_genre = Songs.objects.filter(album__genre=genre)
如果要同时获取相册及其所有相关歌曲,请使用:
genre = Genre.objects.get(name='pop')
songs_in_genre = Songs.objects.filter(album__genre=genre)
albums = Album.objects.filter(genre="rock").prefetch_related('songs')