我有3个模特
client
loan
installment
- 贷款的一部分
我要这样做:
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,没有重复的字段)但我担心性能(你需要在数据库中搜索所有贷款然后分期付款)
答案 0 :(得分:4)
根据Python的Zen: Flat比嵌套更好。您应该将模型视为对象并应用面向对象编程的原则。
考虑您拥有的实体,并应用模拟其现实生活互动的关系。
“必须编写程序供人们阅读,并且只能偶然为机器执行。”
答案 1 :(得分:1)
如果两个模型中的客户端相同,则不应复制它。关于在Django文档中select_related()
,only()
和defer()
上的效果。