我有以下型号:
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'")
答案 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服务器没有正确重启。