处理Django模板中的表示逻辑

时间:2010-10-27 17:01:28

标签: django django-templates

下面的描述大大简化了 - 它只是我们正在解决的一个更大问题的一部分,但内部可以被安全地排除在这个问题之外。

假设我们有以下型号: -

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的标题行中有一个额外的列。< / p>

每个Person可能会为其分配一组不同的Person.items,因此如果Person尚未分配Item,则需要相应的单元格Person将为空( 请参见附件 )。

alt text

问题是如何将正确的AssignedItem值放在相应的列中。我们有一个项目的Queryset,我们在模板中循环以创建标题行,然后我们有一个包含每个人的项目的列表列表。但是,我们如何确保在相应的Item标题下显示正确的AssignedItem?

2 个答案:

答案 0 :(得分:0)

您提到您正在视图中构建列表,

  

我们有一个项目的Queryset   正在模板中循环到   创建标题行,然后我们   有一个包含每个列表的列表   人的物品。

构造此列表时,使列表成为有序列表,如果存在特定值,则分配它,如果不存在,则插入None。 即,杰克的列表应该看起来像[78, 45, None, 94, 72]

编辑: 由于重新排序是个问题,因此请使用包含项目作为索引的字典 也就是说,Jake的值应该看起来像{'Item1':78, 'Item2':45, 'Item4':94, 'Item5':72}

答案 1 :(得分:0)

好吧,主要问题是确保在相应的AssignedItem标题下显示正确的Item

我在模板中尝试了很多东西,但它没有提供太多的操作空间。我最终在视图中创建了“表”,然后将字符串传递给模板进行渲染。