Обработка логики представления в шаблонах Django - PullRequest
2 голосов
/ 27 октября 2010

Приведенное ниже описание сильно упрощено - это только одна часть более серьезной проблемы, которую мы решаем, но внутренности могут быть безопасно оставлены для этого вопроса.

Предположим, у нас есть следующие модели: -

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 будет пустой ( см. прикрепленное изображение ).

alt text

Вопрос в том, как разместить правильное значение AssignedItem в соответствующем столбце.У нас есть Queryset of Items, который мы зацикливаем в шаблоне для создания строки заголовка, а затем у нас есть список списков, содержащих элементы каждого человека.Но как мы можем обеспечить отображение правильного AssignedItem под соответствующим заголовком Item?

Ответы [ 2 ]

0 голосов
/ 28 октября 2010

Что ж, основной проблемой было убедиться, что под соответствующим заголовком Item отображается правильный AssignedItem.

Я много чего перепробовал в шаблоне, но он не давал слишком много места для маневра. В итоге я создал «таблицу» в представлении, а затем передал строку в шаблон для рендеринга.

0 голосов
/ 27 октября 2010

Вы упомянули, что создаете список в представлении,

У нас есть Queryset of Items, который мы зацикливаем в шаблоне для создания строки заголовка, а затем у нас есть списоксписки, содержащие предметы каждого человека.

При создании этого списка сделайте список упорядоченным списком, в котором, если определенное значение существует, присвойте его, а если его нет, затем вставьте None.т. е. список для Джейка должен выглядеть следующим образом: [78, 45, None, 94, 72]

Редактировать: Поскольку переупорядочение является проблемой, используйте словарь с элементом в качестве индекса, т. е. значения для Джейка должны выглядеть как {'Item1':78, 'Item2':45, 'Item4':94, 'Item5':72}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...