У меня есть 2 модели: Project и ProjectTweet.Django queryset.query и запуск запроса в консоли mysql не дают того же результата
Проект имеет отношение OneToMany с ProjectTweet (родственное имя: "твиты")
Вот мой QuerySet:
current_pledge = 1000000
projects = Project.objects.filter(state = "live").filter(pledged__gt=current_pledge).exclude(tweets__step__gte=current_pledge)
И вот результат
print projects.query
SELECT `ks_project`.* FROM `ks_project` WHERE (`ks_project`.`state` = live AND `ks_project`.`pledged` > 1000000.0 AND NOT (`ks_project`.`id` IN (SELECT U1.`project_id` AS Col1 FROM `ks_projecttweet` U1 WHERE U1.`step` >= 1000000)))
(я» ve заменил длинный список полей на ks_project
. * только для постчитаемости)
Этот запрос вычисляется в django, дайте мне 0 результат, но я должен его иметь.
И в самом деле, когда я скопировать запрос в тузде консоли (тот же пользователь) я получить свой уникальный результат ... (просто добавить цитату в строку, так как они добавляются только тогда, когда evaluting запроса, как это сказано в: Potential Django Bug In QuerySet.query?)
Любая идея о том, что вызывает эту разницу?
Я протестировал его без первого фильтра (state = "live"), и он по-прежнему дает мне 0 результат (и более одного, как и ожидалось в консоли mysql). Вот запрос (немного проще предыдущего) 'SELECT' ks_project'. * FROM 'ks_project' WHERE (' ks_project'.'pledged'> 1000000.0 AND NOT ('ks_project'.'id' IN (SELECT U1.'project_id' AS Col1 FROM' ks_projecttweet' U1 WHERE U1. 'step'> = 1000000)))' – Kemical
Простейшим объяснением является то, что Django использует другую копию базы данных, чем тот, который вы просматриваете в консоли. Возможно ли это? – evergreen
Нет, я использую созданную django ORM: /, я предполагаю, что это может иметь какое-то отношение к промежуточной операции, выполненной непосредственно перед оценкой запроса (то же самое, что и строки кавычек). Но даже если в этом случае я увижу другой вариант (сделайте два запроса и разницу между вместо использования "exclude" метод), я хотел бы полагаться на queryset.query для отладки моих запросов ... – Kemical