Como participar de modelos não relacionais em Django 1.3 em 2 campos
-
09-12-2019 - |
Pergunta
Eu tenho 2 modelos existentes que eu preciso participar que não são relacionais (sem chaves estrangeiras).Estes foram escritos por outros desenvolvedores não podem ser modificados por mim.
Aqui está uma descrição rápida deles:
Processo de modelo
- filename de campo
- caminho de campo
- Field SoneyElse
- barra de campo
Modelo Service
- filename de campo
- caminho de campo
- servicename de campo
- field foo
Preciso participar de todas as instâncias desses dois modelos nas colunas do nome do arquivo e do caminho.Eu tenho filtros existentes Eu tenho que aplicar a cada um deles antes que esta participação ocorra.
Exemplo:
a= processo.Objects.filter (mais sombra= 231)
b= service.objects.filter (foo= 'abc')
Result= A.Filter (nome do arquivo= b.fileename, path= b.path)
Solução
Isso é uma droga, mas sua melhor aposta é iterar todos os modelos de um tipo e emitir consultas para obter seus modelos unidos para o outro tipo.
A outra alternativa é executar uma consulta SQL RAW para executar essas uniões e recuperar os IDs para cada objeto do modelo e, em seguida, recuperar cada par unido com base nisso.Mais eficiente em tempo de execução, mas precisará ser mantido manualmente se o seu esquema evolui.