2013-08-05 5 views
2

j'ai eu 3 modèlesQuelle est la meilleure façon d'organiser les relations dans django? Plat ou comme un arbre?

client

loan

installment - une partie du prêt

Shold je fais:

loan-foreignKey(client) 
installment-foreignKey(loan) 

et d'obtenir le client par acomptes quelque chose comme ça :

loans = client.loan.all() 
result = array() 
foreach(loans as loan): 
    result = result + loan.installments.all() 
return result; 

ou dois-je faire comme ça:

loan-foreignKey(client) 
installment-foreignKey(client) 
installment-foreignKey(loan) 

et juste: client.installment.all()

coutures de première façon plus propre du point de programmeur de vue (pas spagetti autour, pas de champs dupliqués) mais je suis inquiet au sujet de la performance (vous devez rechercher la base de données pour tous les prêts, puis pour les versements de ces prêts)

Répondre

1

Si le client est le même dans les deux modèles, vous ne devez pas le dupliquer. En ce qui concerne les performances lues sur select_related(), only() et defer() dans les docs Django.

4

Selon Zen de Python: plat est mieux que imbriqué. Vous devriez considérer vos modèles comme des objets et appliquer les principes de la programmation orientée objet. Réfléchissez aux entités que vous avez et appliquez les relations simulant leur interaction en temps réel.

"Les programmes doivent être écrits pour que les gens puissent les lire, et seulement de façon incidente pour que les machines puissent les exécuter."

Questions connexes