在Django中组合Q对象并限制其中一个

时间:2014-08-18 19:08:53

标签: django django-queryset django-orm django-q

我希望将这两个查询合并为1,以获取名称为Music的{​​{1}}对象,并从艺术家排序的xyz类别中获取前3个对象:

10

我可以使用1. Music.objects.filter(name='xyz', genre=10) 2. Music.objects.filter(genre=10).order_by('artist')[:3] 这样的对象,但我不知道如何订购&过滤下面的第3个Q对象:

Q

2 个答案:

答案 0 :(得分:0)

也许尝试这样?

Music.objects.filter( (Q(name='xyz') & Q(genre=10)) | Q(genre=10) ).order_by('artist')[:3]

答案 1 :(得分:0)

无法做到这一点,使用两个查询但更改第二个以避免重复:

exact = Music.objects.filter(name='xyz', genre=10)
additional = Music.objects.filter(genre=10).exclude(name='xyz').order_by('artist')[:3]
do_something_with = list(exact) + list(additional)