Я борюсь с дизайном приложения django. Учитывая следующие модели:Показать несколько связанных моделей Django в проблеме проектирования таблиц
class A(models.Model):
name = models.CharField(max_length=255)
class B(models.Model):
name = models.CharField(max_length=255)
a = models.ForeignKey(A)
class C(models.Model):
val = models.IntegerField()
b = models.ForeignKey(B)
Я хотел бы вид/шаблон, который отображает таблицу HTML, которая показывает в первом столбце все А объекты, во втором столбце все объекты B (сгруппированных по А), на которые ссылаются на A и в последнем столбце - сумма всех значений val из объектов C, которые относятся к каждому B. Все это с суммой для каждого объекта A. Следующий пример показывает, что я ищу:
A1.name | B1.name [where FK to A1] | sum(C.val) [where FK to B1] A1.name | B2.name [where FK to A1] | sum(C.val) [where FK to B2] A1.name | Total | sum(C.val) [where FK to Bx (all B that have FK to A1] A2.name | B3.name [where FK to A2] | sum(C.val) [where FK to B3] A2.name | Total | sum(C.val) [where FK to Bx (all B that have FK to A2]
Может кто-нибудь дать мне совет, как разработать такую проблему (к сожалению, мой код часто заканчивается в довольно беспорядок)?
Должен ли я расширять классы моделей с помощью соответствующих методов? Выполняет ли пользовательский запрос для всех табличных данных в представлении? Просто получить все объекты через менеджеров и сделать большинство вещей в шаблоне?
Спасибо за каждый ответ.
С уважением,
Luke.
Спасибо, что выглядит намного чище по сравнению с тем, что я придумал, но это будет работать только с Django v1.1 и более поздними версиями, правильно? – Lukas
Да, он совместим с текущими магистральными и будущими версиями из-за агрегации. Вы можете заменить его 'extra' select (subquery) или вычислить суммы' C.val' для каждого 'B' в python –
Lukas, посмотрите на отредактированный ответ –