2
У меня есть три таблицы с отношениями между;Объекты подсчета и упорядочения по нескольким отношениям
Customer --> Order --> OrderLine
Я хочу знать, какие клиенты размещали заказы с большинством строк заказа. Используя чистый SQL, я бы использовал следующий запрос;
SELECT a.*, COUNT(c.id) AS total FROM customer AS a
LEFT JOIN order AS b ON a.id = b.customer_id
LEFT JOIN order_line AS c ON b.id = c.order_id
GROUP BY a.id ORDER BY total DESC;
я увидел еще один вопрос here который я подозреваю, может быть решением моей проблемы, но я не могу иметь смысл ответа на работу на несколько отношений.
Я извиняюсь за то, что неясно, отношения, к сожалению, не многие-ко-многим, но один-ко-многим, (то есть один клиент имеет много заказы, один заказ имеет много порядковых номеров). Это усложняет ситуацию? – Rayne
@Rayne Реверс «ForeignKey» - это «Соответствующий менеджер», который работает почти точно так же, как «ManyRelatedManager», который вы получите для «ManyToManyField». Так что это обязательно должно работать, не усложняя ситуацию. @Neil Вы можете использовать '.order_by ('- max_order_lines')' вместо использования отсортированного dict и всего. Затем просто используйте 'custs.first()', чтобы получить первую строку. – knbk
@knbk спасибо! Я отредактировал свой ответ на аккаунт для всех ваших комментариев. Rayne, это должно работать, пожалуйста, примите ответ, если это произойдет :) – Neil