下面的描述大大简化了 - 它只是我们正在解决的一个更大问题的一部分,但内部可以被安全地排除在这个问题之外。
假设我们有以下型号: -
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
将为空( 请参见附件 )。
问题是如何将正确的AssignedItem值放在相应的列中。我们有一个项目的Queryset,我们在模板中循环以创建标题行,然后我们有一个包含每个人的项目的列表列表。但是,我们如何确保在相应的Item标题下显示正确的AssignedItem?
答案 0 :(得分:0)
您提到您正在视图中构建列表,
我们有一个项目的Queryset 正在模板中循环到 创建标题行,然后我们 有一个包含每个列表的列表 人的物品。
构造此列表时,使列表成为有序列表,如果存在特定值,则分配它,如果不存在,则插入None。
即,杰克的列表应该看起来像[78, 45, None, 94, 72]
编辑:
由于重新排序是个问题,因此请使用包含项目作为索引的字典
也就是说,Jake的值应该看起来像{'Item1':78, 'Item2':45, 'Item4':94, 'Item5':72}
答案 1 :(得分:0)
好吧,主要问题是确保在相应的AssignedItem
标题下显示正确的Item
。
我在模板中尝试了很多东西,但它没有提供太多的操作空间。我最终在视图中创建了“表”,然后将字符串传递给模板进行渲染。