我遇到了这个问题,想寻求你的帮助。
背景: 我有一袋球,每个球都有一个年龄(红色和蓝色)和颜色属性。
我想要的是获得前10名“最年轻”的球,并且最多有3个蓝色球(这意味着如果在10个最年轻的球的列表中有超过3个蓝球,那么替换最老的“还原剂”最年轻的红球蓝球)
获得前10名:
sel_balls = Ball.objects.all().sort('age')[:10]
现在,为了满足“最多3个蓝球”的条件,我需要进一步处理:
否则:获得额外的B - 3红球来替换最老的(B - 3)蓝色球(并且这些红球一定不会出现在已经取出的原始10个球中)。我想我可以通过获取红球列表中最老的年龄值来做到这一点,并做另一个查询,如:
add_reds = Ball.objects.filter(age> = oldest_sel_age)[:B - 3]
我的问题是:
谢谢大家。
答案 0 :(得分:0)
将Q用于对数据库的复杂查询:https://docs.djangoproject.com/en/dev/topics/db/queries/#complex-lookups-with-q-objects
答案 1 :(得分:0)
您应该使用注释来执行此操作。 请参阅documentation。
在.filter()
给出'WHERE'之前 .annotate()
.filter()
给出'HAVING'之后 .annotate()
(这就是你需要的)