Python 具有数百个字段的Django模型
我有一个拥有数百处房产的模型。属性可以是不同的类型(整数、字符串、上载的文件等)。我想一步一步地实现这个复杂的模型,从最重要的属性开始。我可以想出两个选择:Python 具有数百个字段的Django模型,python,django,Python,Django,我有一个拥有数百处房产的模型。属性可以是不同的类型(整数、字符串、上载的文件等)。我想一步一步地实现这个复杂的模型,从最重要的属性开始。我可以想出两个选择: 将特性定义为常规模型字段 定义一个单独的模型以分别保存每个属性,并使用外键将其链接到主模型 对于如何使用django处理具有大量属性的模型,我没有找到任何建议。这两种方法的优点/缺点是什么?你肯定不应该将你的财产定义为外键。每次您需要一个完整的模型时,您的数据库服务器将不得不进行数百次连接,从而破坏您的性能 如果几乎每次访问模型时都需要属性
外键将其链接到主模型
对于如何使用django处理具有大量属性的模型,我没有找到任何建议。这两种方法的优点/缺点是什么?你肯定不应该将你的财产定义为外键。每次您需要一个完整的模型时,您的数据库服务器将不得不进行数百次
连接
,从而破坏您的性能
如果几乎每次访问模型时都需要属性,则应将它们保留在同一模型中。如果没有,您可以创建一个单独的属性
模型,并通过OneToOneField
将其链接到原始模型
我个人有过这样的经历。我们必须建立一个酒店推荐引擎,那时我们正在使用。由于Drupal将每个自定义属性存储在一个单独的MySQL表中,我们很快意识到我们应该切换框架,因为每个查询都会使我们的生产服务器崩溃(20多个连接对MySQL来说是致命的)。顺便说一句,我们最终使用了一个基于的定制解决方案,它可以很好地处理数百个字段
更新:如果您幸运地使用了最新版本的PostgreSQL,您可以利用存储将所有字段打包到单个模型字段中。但是请注意,您必须自己实现一个验证方案
客户要求
首先,我感受到你的痛苦,祝你一切顺利!我想重申一下,如果不是这样的话,您应该首先考虑更改它,因为在一个对象上永远不需要数百个属性,它通常表示需要数组、继承或单独的类等
接下来,您将需要大量使用
值
和值_列表
来仅从数据库返回实际需要的属性,因为这将严重影响性能
因为您不能对模型做任何事情,所以应该尝试从设计方面解决性能问题。在你的网站上应该有大量的功能,这意味着你只需要从模型中返回一些值。这样一来,您选择的选项就没有多大区别了,因为返回的内容非常有限
尽可能地过滤,并节省使用排序。您可以将它们分组到几个单独的模型中,通过OneToOneFields链接到主模型。这将“名称空间”您的数据,并且名称空间是“一个非常好的主意”。在编程中,一般来说,如果您的类有数百个字段,则可能需要重新考虑(继承、单独的类等)@Sayse:customer requirement。我绝对不会重新考虑他们的建筑。