Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django-从反向模型中选择相关对象-例如反向选择相关对象_Django_Django Orm - Fatal编程技术网

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')