В Django у меня есть следующие запросы в представлении
applicant=Applicants.objects.get(ben=entity_number)
f471s=applicant.form471_set.order_by("-funding_year","number")
enrollment=f471s.values("schooldata__ben").annotate(f=Max("number")).filter(
number=F("f")).values().aggregate(
s=Sum("schooldata__student_count"))['s']
Когда я пытаюсь получить доступ к странице для этого представления, я получаю сообщение об ошибке
DatabaseError
(1064, "You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use
near 'FROM (SELECT `frontend_form471`.`number` AS `number`,
`frontend_form471`.`form_s' at line 1")
Я заставил регистратор распечатать SQL, который генерирует Django, и получил
(0.001) SELECT FROM (SELECT `frontend_form471`.`number` AS `number`,
`frontend_form471`.`form_status` AS `form_status`, `frontend_form471`.`ben_id`
AS `ben_id`, `frontend_form471`.`funding_year` AS `funding_year`,
MAX(`frontend_form471`.`number`) AS `f` FROM `frontend_form471` LEFT OUTER JOIN
`SchoolData` ON (`frontend_form471`.`number` = `SchoolData`.`f471 Application Number`)
WHERE (`frontend_form471`.`ben_id` = 122871 ) GROUP BY `frontend_form471`.`number`,
`frontend_form471`.`number`, `frontend_form471`.`form_status`,
`frontend_form471`.`ben_id`, `frontend_form471`.`funding_year` HAVING
`frontend_form471`.`number` = MAX(`frontend_form471`.`number`) ORDER BY
`frontend_form471`.`funding_year` DESC, `frontend_form471`.`number` ASC)
subquery; args=(u'122871',)
Для справки, я использую MySQL 5.1.54-1ubuntu4. Похоже, синтаксическая ошибка находится в первой строке, но я не понимаю, почему Django генерирует код SQL с неправильным синтаксисом. Можно ли как-то изменить что-либо (возможно, настройку), чтобы это исправить?
Редактировать: в ответ на ответ я также попытался запустить третью строку кода Python без второго вызова .values()
и получил точно такой же эффект.