Приведенное ниже описание сильно упрощено - это только одна часть более серьезной проблемы, которую мы решаем, но внутренности могут быть безопасно оставлены для этого вопроса.
Предположим, у нас есть следующие модели: -
class Item(models.Model):
name = models.CharField(max_length=150)
value = models.DecimalField(max_digits=12,decimal_places=2)
class Person(models.Model):
name = models.CharField(max_length=150)
items = models.ManyToManyField(Item, through='AssignedItem')
class AssignedItem(models.Model):
person = models.ForeignKey(Person)
item = models.ForeignKey(Item)
value = models.DecimalField(max_digits=12,decimal_places=2)
Таким образом, человеку обычно может быть назначено ноль, один или несколько элементов, и значение каждого назначенного элемента может быть переопределено для конкретного человека путем указания нового значения в модели through
.
Мы стремимся достичь HTML-таблицы, которая имеет все Item.name
в качестве строки заголовка, с одним дополнительным столбцом в этой строке заголовка для Person.name
.
Каждый Person
может иметь другой набор Person.items
, назначенный им, поэтому ожидается, что если Person
не был назначен Item
, соответствующая ячейка для этого Person
будет пустой ( см. прикрепленное изображение ).
Вопрос в том, как разместить правильное значение AssignedItem в соответствующем столбце.У нас есть Queryset of Items, который мы зацикливаем в шаблоне для создания строки заголовка, а затем у нас есть список списков, содержащих элементы каждого человека.Но как мы можем обеспечить отображение правильного AssignedItem под соответствующим заголовком Item?