Я сталкивался с вопросом, когда аннотирования с графом, F объектом и целогоДжанго «Неизвестный столбец, имеющий пункт» при объединении 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()
OperationalError: (1054, "Unknown column 'bug_example_task.my_integer' in 'having clause'")
Неожиданно это работает, если изменить порядок:
1 + F('my_integer') + Count('users')
к:
F('my_integer') + Count('users') + 1
Но, к сожалению, я заперт в порядке (я привел минимальный пример). Фактическая аннотацию я делаю аналогично:
(my_variable/F('my_integer'))%Count('users')
, которые не могут быть перестроены :(
Это запрос также работает:
- без фильтра()
- без count()
- обычно на SQLite3
Таблица, в которой я выполняю запрос, является здоровенным гиппопотамом, поэтому я не могу позволить себе обрабатывать уровень на уровне python. Я попытался разделить его на разные аннотации, используя Case/When, чтобы поймать любые ошибки div 0, а также и переместить вычисления в фильтр(), но безрезультатно.
Я что-то не так? я должен открыть билет? Пожалуйста, помогите мне в интернете.
Джанго: 1.9.6 - - MySql: 5.7.11 - - Python: 2.7.10 - - OSX: 10.11.4
Могло ли быть, потому что вы используете зарезервированное слово «целое», как аннотации и колонки имя? – e4c5
integer не является зарезервированным словом в python/django. Фактическое имя, которое я использовал, было другим, я просто использовал его в качестве примера: P – Dean
https://dev.mysql.com/doc/refman/5.6/en/integer-types.html – e4c5