使用Django ORM创建笛卡尔积

时间:2018-08-27 17:25:53

标签: django python-3.x django-models django-views

我目前有3张桌子; PersonItem和称为PersonItems的多对多映射表。

我正在寻找在左列下方输出所有Person的HTML表,然后表头将是Item。根据{{​​1}}表中的条目,一个人可能会或不会拥有该商品,我将在相应的单元格中指出。

最终,我将得到一个Django模板的HTML表输出,该模板包含Person乘以Item'td'元素。最多可能有5000人,但只有30左右。

我的目标是通过在PersonItemsPerson之间创建一个笛卡尔,并为每种组合检查PersonItem表中是否存在条目来产生该表。

我遇到的问题是创建人员和项目表的笛卡尔积,然后将其与Item联接。我可以看到的没有SQL的唯一方法是迭代所有PersonItems,然后对每个人执行查询以查看该人是否有该物品。但是,该方法比使用原始SQL查询要慢很多。

我已经尝试过iteritems.product函数来创建初始笛卡尔坐标,即

Person

然后重复此操作以检查是否存在相应的PersonItem记录,但是在前端它的速度明显慢。

我不是特别想在我的Django视图中使用大型SQL查询,我是Django的新手,看来这可能不是最好的选择。如果不能有效地使用Django ORM和/或Python,我将坚持使用SQL,即大约执行以下查询(注意笛卡尔子查询)。

product(Person.objects.all(), Item.objects.all())

顺便说一下,数据库是MySQL,并不是那应该有所作为。

0 个答案:

没有答案