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

Foi útil?

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)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top