作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何使用 django QuerySet API 为跨 M2M 关系芯片的完整外连接创建查询?
它不受支持,欢迎一些有关创建我自己的经理来执行此操作的提示。
编辑添加:
@S.洛特:
谢谢你的启示。
OUTER JOIN 的需要来自应用程序。它必须生成一份报告,显示输入的数据,即使它仍然不完整。
我不知道结果将是一个新的类/模型。你的提示会对我有很大帮助。
最佳答案
Django 不支持通常 SQL 意义上的“连接”——它支持对象导航。
请注意,关系连接(内部或外部)会创建一个新的实体“类”。一个在 Django 中没有定义的。所以没有合适的“结果集”,因为你得到的东西没有类定义。你能做的最好的事情就是定义一个元组,它将用 None 来填充缺失的组合。
左(或右)外连接看起来像这样。它创建了两个不相交的子集,那些有一组相关联的实体,那些没有。
for obj in Model1.objects.all():
if obj.model2_set().count() == 0:
# process (obj, None) -- no Model2 association
else:
for obj2 in obj.model2_set.all():
# process (obj, obj2) -- the "inner join" result
for obj2 in Model2.objects.all():
if obj2.model1_set().count() == 0:
# process (None, obj2) -- no Model1 association
if someObj.anObj2attribute is None
:我们实际上是在寻找没有
Model1
对象关联的
Model2
项目。嗯……为什么我们将它们放在外连接中,只是为了过滤他们使用
if
语句?为什么不单独查询并正确处理每个子集?
errorList1 = Model1.objects.filter( status="Incomplete" )
errorList2 = Model2.objects.filter( status="Incomplete" )
<table>
<tr><th>Model1</th><th>Model2</th></tr>
{% for e1 in errorList1 %}
<tr><td>e1</td><td>NULL</td></tr>
{% endfor %}
{% for e2 in errorList2 %}
<tr><td>NULL</td><td>e2</td></tr>
{% endfor %}
</table>
关于sql - django 中的全外连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/252976/
我是一名优秀的程序员,十分优秀!