带有子查询的Django ListView给出了这个版本的MySQL还不支持'LIMIT& IN / ALL / ANY / SOME子查询'

时间:2014-10-22 22:02:59

标签: django

我有以下型号:

class Credit(models.Model):
  user = models.ForeignKey(User)
  ...

和ListView

class CreditListView(ListView):
  paginate_by = 10
  model = Credit
  ...

如果我想在侧面CreditListView:

中过滤用户的积分
def get_queryset(self):
    users = User.objects.filter(...)[:10]
    credits = Credits.objects.filter(user__in=users)
    return credits

我将收到NotSupportedError异常:

(1235, "This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'")

3 个答案:

答案 0 :(得分:4)

试试这个:

users = User.objects.filter(...)[:10]
users = list(users)
credits = Credits.objects.filter(user__in=users)

Django模型返回的列表完全不是Python列表,而是扩展形式。但这有一些局限性。因此,我们需要将其转换为Python可理解的列表。

答案 1 :(得分:0)

  

(1235,"这个版本的MySQL还没有支持' LIMIT&   IN / ALL / ANY / SOME子查询'")

分页负责LIM的LIMIT和查询集。您可以通过使用include / exclude或使用索引范围而不是分页来重写查询来逃避。如果没有,请使用原始SQL来获取您的查询集。

一般来说,使用MySQL(特别是MyISAM)是一个非常痛苦的想法,因为除了作为数据库的问题,它不支持20-25%的Django的ORM。如果您无法切换到PostgeSQL,请尝试使用InnoDB。

答案 2 :(得分:0)

问题在于这一行:

users = User.objects.filter(...)[:10]

它不喜欢子查询中的限制,我以为我已经尝试删除它,可能是django服务器没有正确重启。