我目前有3张桌子; Person
,Item
和称为PersonItems
的多对多映射表。
我正在寻找在左列下方输出所有Person
的HTML表,然后表头将是Item
。根据{{1}}表中的条目,一个人可能会或不会拥有该商品,我将在相应的单元格中指出。
最终,我将得到一个Django模板的HTML表输出,该模板包含Person乘以Item'td'元素。最多可能有5000人,但只有30左右。
我的目标是通过在PersonItems
和Person
之间创建一个笛卡尔,并为每种组合检查PersonItem表中是否存在条目来产生该表。
我遇到的问题是创建人员和项目表的笛卡尔积,然后将其与Item
联接。我可以看到的没有SQL的唯一方法是迭代所有PersonItems
,然后对每个人执行查询以查看该人是否有该物品。但是,该方法比使用原始SQL查询要慢很多。
我已经尝试过iteritems.product函数来创建初始笛卡尔坐标,即
Person
然后重复此操作以检查是否存在相应的PersonItem记录,但是在前端它的速度明显慢。
我不是特别想在我的Django视图中使用大型SQL查询,我是Django的新手,看来这可能不是最好的选择。如果不能有效地使用Django ORM和/或Python,我将坚持使用SQL,即大约执行以下查询(注意笛卡尔子查询)。
product(Person.objects.all(), Item.objects.all())
顺便说一下,数据库是MySQL,并不是那应该有所作为。