2013-08-05 5 views
2

я получил 3 моделиКаков наилучший способ упорядочить отношения в django? Плоские или древовидные?

client

loan

installment - одна часть кредита

shold я сделать:

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

и получить клиента рассрочку что-то подобное :

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

или я должен сделать это так:

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

и просто: client.installment.all()

Первым способом швы уборщик от программатора точки зрения (нет Spagetti вокруг, не дублированных полей), но я «Меня беспокоит производительность (вам нужно искать базу данных по всем кредитам, а затем для рассрочки по этим кредитам)

ответ

1

Если клиент в обеих моделях одинаковый, вы не должны дублировать его. Что касается производительности, прочитайте select_related(), only() и defer() в документах Django.

4

Согласно Zen of Python: Плоский лучше, чем вложенный. Вы должны думать о своих моделях как о объектах и ​​применять принципы объектно-ориентированного программирования.

Подумайте об объектах, которые у вас есть, и примените отношения, имитирующие их real взаимодействие.

«Программы должны быть написаны для людей, чтобы читать, и только случайно для машин для выполнения».