我有一对多的关系表,其中有一些数据位于连接基础
我的模型的基本版本如下:
class FooLine(models.Model):
name = models.CharField(max_length=255)
class FooCol(models.Model):
name = models.CharField(max_length=255)
class FooVal(models.Model):
value = models.CharField(max_length=255)
line = models.ForeignKey(FooLine)
col = models.ForeignKey(FooCol)
如果该值不存在,我正在尝试使用null搜索某个行的每个值(基本上我正在尝试显示fooval表,其值为尚未填充的值的空值) 一个典型的SQL将是
SELECT value FROM FooCol LEFT OUTER JOIN
(FooVal JOIN FooLine
ON FooVal.line_id == FooLine.id AND FooLine.name = "FIXME")
ON FooCol.id = col_id;
有没有办法使用django模型
对上面的查询进行建模由于
答案 0 :(得分:0)
外部联接可以被视为黑客,因为SQL缺乏“导航”。
你所拥有的是一个简单的if语句。
for line in someRangeOfLines:
for col in someRangeOfCols:
try:
cell= FooVal.objects().get( col = col, line = line )
except FooVal.DoesNotExist:
cell= None
这就是外连接的真正含义 - 尝试使用NULL替换进行查找。
唯一的优化类似于以下内容。
matrix = {}
for f in FooVal.objects().all():
matrix[(f.line,f.col)] = f
for line in someRangeOfLines:
for col in someRangeOfCols:
cell= matrix.get((line,col),None)