假设我们有两个这样的模型:
Artist(models.Model):
name = models.CharField(max_length=50)
Track(models.Model):
title = models.CharField(max_length=50)
artist = models.ForeignKey(Artist, related_name='tracks')
如何过滤此关系以获取第一个外国记录?
所以我尝试了类似这样的东西,但它不起作用(如预期的那样)
artists = Artist.objects.filter(tracks__first__title=<some-title>)
artists = Artist.objects.filter(tracks[0]__title=<some-title>)
有没有办法让这项工作?
答案 0 :(得分:1)
这是一个没有考虑性能的解决方案。
Artist.objects.filter(tracks__in=[a.tracks.first() for a in Artist.objects.all()], tracks__title=<some_title>)
没有列表方法,按要求。
Artist.objects.filter(tracks__in=Track.objects.all().distinct('artist').order_by('artist', 'id'), tracks__title=<some_title>)
order_by&#39; id&#39;确保distinct根据插入获得第一首曲目非常重要。 order_by&#39;艺术家&#39;是排序不同查询的要求。在此处阅读:https://www.postgresql.org/docs/9.0/static/sql-select.html#SQL-DISTINCT