筛选第一个多对多项的查询



我想要第一个!这首歌来自NL或BE的艺术家。现在我正在为一首歌向所有艺术家查询。这是我的查询。

Song.objects.filter(artists__country__code__in=['NL', 'BE'])

这些是我的模型:

class Song(Timestamps):
uuid = models.UUIDField('UUID', unique=True)
name = models.CharField('Name', max_length=255, blank=True)
artists = models.ManyToManyField(Artist)
...
class Artist(Timestamps):
uuid = models.UUIDField('UUID', unique=True)
name = models.CharField('Name', max_length=255, blank=True)
country = CountryField(blank=True, null=True)
...

我知道我可以像这样访问多对多字段的第一项:

song.artists.first()

但是我不知道如何在查询过滤器中做到这一点。什么好主意吗?提前谢谢。

据我所知,你希望每首歌都有第一个艺人,因为一首歌可以有多个艺人。我的解决方案可能不是最好的,因为它只是返回对象的值,但也许它有帮助。

Song.objects.filter(artists__country__code__in=['NL', 'BE']).values("uuid", "name", "artists__name", "artists_uuid")

这将返回具有定义值的字典的查询集。

你要做的是获得国家代码['NL', 'BE']的第一位艺术家

使用像这样的东西

Song.objects.filter(artists__country__code__in=['NL', 'BE']).first().artists.first()

看起来您想要与属于指定国家的歌曲关联的第一个艺术家。我认为你可以查询Artist模型本身,并指定相关的歌曲。

Artist.objects.filter(country__code__in=['NL', 'BE'], song__name='My song').first()

相关内容

  • 没有找到相关文章

最新更新