Python “Django”;having子句中的未知列;在注释中组合F和计数时

Python “Django”;having子句中的未知列;在注释中组合F和计数时,python,mysql,django,django-queryset,django-orm,Python,Mysql,Django,Django Queryset,Django Orm,我在使用计数、F对象和整数进行注释时遇到了一个问题 class Task(models.Model): my_integer = models.IntegerField() class User(models.Model): task = models.ForeignKey("Task", related_name="users") Task.objects.annotate( sum= 1 + F('my_integer') + Count('users') ).

我在使用计数、F对象和整数进行注释时遇到了一个问题

class Task(models.Model):
    my_integer = models.IntegerField()

class User(models.Model):
    task = models.ForeignKey("Task", related_name="users")


Task.objects.annotate(
    sum= 1 + F('my_integer') + Count('users')
).filter(
    sum= 10
).count()
操作错误:(1054,“having子句”中的未知列“bug\u example\u task.my\u integer”)


令人惊讶的是,如果我更改以下顺序,它会起作用:

1 + F('my_integer') + Count('users')
致:

但不幸的是,我被锁定在订单中(我给出了一个最小的例子)。我所做的实际注释类似于:

(my_variable/F('my_integer'))%Count('users')
无法重新排列的:(

它还起作用:

  • 没有过滤器()
  • 没有伯爵()
  • 通常在SQLite3上
我正在执行查询的表是一个庞大的河马,因此我负担不起任何python级别的处理。我尝试将其分割为不同的注释,使用Case/When捕捉任何div 0错误,以及将计算移动到filter()中,但没有用

我做错什么了吗?我应该开罚单吗?请帮我上网

Django:1.9.6-- MySql:5.7.11-- Python:2.7.10-- OSX:10.11.4

您使用的是Django不允许的python关键字
integer
:请阅读此处了解更多信息

我在两种顺序情况下都检查了原始查询,但聚合在DB级别保留了相同的顺序:

具有(1+F('my_integer')+计数('users'))<12

我真的不知道为什么在这种情况下更改顺序很重要,但我发现错误发生在尝试使用
.count()
聚合后,如果我尝试使用
.aggregate(count('sum'),同样的错误也会发生
。因此我建议简单地使用
len
,尽管这不是一种优化的方法,但我希望它现在能有所帮助:

len(Task.objects.annotate(
sum=1+F('my_integer')+计数('users'))
).过滤器(
总和=10
))

这可能是因为您使用保留字“integer”作为注释和列名吗?integer在python/django中不是保留字。我使用的实际名称不同,我只是将其用作示例:PI将integer更新为my_integer以避免混淆。django应该在查询中引用所有字段名。我已经用“整型”->“my_integer”更新了这个问题,我仍然面临着同样的问题需要确认这个奇怪的问题!由于表的大小,我不能使用len(),所以我回到了原始查询,这让我每晚都哭:'(.我想等我有空的时候我会提交一张django罚单。再次感谢。如果你有任何消息,请随时更新这篇帖子;)我真的很想知道如何才能最好地解决这个问题。
(my_variable/F('my_integer'))%Count('users')