Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 什么';在django组织关系的最好方式是什么?平坦的还是像树一样的?_Python_Django_Django Models_Database Relations - Fatal编程技术网

Python 什么';在django组织关系的最好方式是什么?平坦的还是像树一样的?

Python 什么';在django组织关系的最好方式是什么?平坦的还是像树一样的?,python,django,django-models,database-relations,Python,Django,Django Models,Database Relations,我有三个模型 客户端 贷款 分期付款-贷款的一部分 我应该: 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(

我有三个模型

客户端

贷款

分期付款
-贷款的一部分

我应该:

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)
或者我应该这样做:

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.installation.all()


第一种方法是从程序员的角度来看(没有垃圾邮件,没有重复的字段),但我担心性能(您需要搜索数据库中的所有贷款,然后再搜索此贷款中的分期付款)

如果两种型号的客户机相同,则不应该复制它。关于Django文档中的
select_related()
only()
defer()
的性能阅读。

根据Python的Zen:扁平比嵌套好。您应该将模型视为对象,并应用面向对象编程的原则

思考您拥有的实体,并应用关系模拟其真实生活交互

程序必须是为人们阅读而编写的,而且只是为机器执行而编写的