junção externa modelização no Django
-
06-07-2019 - |
Pergunta
Eu tenho muitos para muitos tabela de relacionamento whith alguns dados na base articulando
a versão básica do meu modelo parecido com:
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)
Eu estou tentando busca a cada valores para uma determinada linha com um nulo se o valor não estiver presente (basicamente eu estou tentando exibir a tabela fooval com valores nulos para valores que não foram preenchidas) um sql típico seria
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;
Existe alguma maneira de modelise acima consulta usando django modelo
Graças
Solução
associações externas pode ser visto como um hack porque SQL carece de "navegação".
O que você tem é uma situação simples se-declaração.
for line in someRangeOfLines:
for col in someRangeOfCols:
try:
cell= FooVal.objects().get( col = col, line = line )
except FooVal.DoesNotExist:
cell= None
Isso é o que uma associação externa realmente é -. Uma tentativa de pesquisa com uma substituição NULL
A única otimização é algo como o seguinte.
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)