Django queryset外键

use*_*436 3 django django-models django-orm django-queryset

在Django中对外键关系进行反向查找的正确方法是什么?例如,假设我有以下2个型号.

class Songs(models.Model):
    title = models.CharField(max_length=200)
    artist = models.CharField(max_length=200)
    genre = models.ForeignKey('Genres')

class Genres(models.Model):
    genre = models.CharField(max_length=100)
Run Code Online (Sandbox Code Playgroud)

如果我希望用户能够根据流派搜索歌曲我该怎么做?

例如,下面是我想要做的,但我知道它不起作用,因为Songs表的流派列是ID,而不是关键字.

song = models.Songs.objects.get(genre='Jazz')
Run Code Online (Sandbox Code Playgroud)

ale*_*cxe 8

使用双下划线语法到达genre相关模型中的字段:

Songs.objects.filter(genre__genre='Jazz')
Run Code Online (Sandbox Code Playgroud)

出于可读性目的和一致性,请考虑将genre字段重命名为name:

class Genres(models.Model):
    name = models.CharField(max_length=100)
Run Code Online (Sandbox Code Playgroud)