首页 > 解决方案 > Django 限制子查询

问题描述

我写了以下代码:

away_fixtures = Fixture.objects.filter(Q(away=home) | Q(home=away)).order_by('-date')[:3]
tips = tips.filter(prediction__fixture__in=away_fixtures)

执行时出现以下错误(我使用的是 MariaDB 10.4,它不支持子查询中的 LIMIT):

django.db.utils.NotSupportedError: (1235, "This version of MariaDB doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'")

执行以下代码时:

away_fixtures = Fixture.objects.filter(Q(away=home) | Q(home=away)).order_by('-date')
tips = tips.filter(prediction__fixture__in=away_fixtures)

但这会返回所有“away_fixtures”的“提示”,我只想要最后 3 个夹具的提示(因此将其限制为 3 个夹具)。如何在不切换数据库引擎的情况下实现这一目标?

标签: pythondjango

解决方案


我没有测试它,所以我不确定:

away_fixtures = Fixture.objects.filter(Q(away=home) | Q(home=away)).order_by('-date')[:3]
tips = tips.filter(prediction__fixture__id__in=[fixture.id for fixture in away_fixtures])

我认为问题出在限制为三个子查询away_fixtures,所以我试图强制评估第一个查询以获取 id,然后通过过滤这些 id 来获取第二个查询。


推荐阅读