Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.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 - Fatal编程技术网

Python 具有数百个字段的Django模型

Python 具有数百个字段的Django模型,python,django,Python,Django,我有一个拥有数百处房产的模型。属性可以是不同的类型(整数、字符串、上载的文件等)。我想一步一步地实现这个复杂的模型,从最重要的属性开始。我可以想出两个选择: 将特性定义为常规模型字段 定义一个单独的模型以分别保存每个属性,并使用外键将其链接到主模型 对于如何使用django处理具有大量属性的模型,我没有找到任何建议。这两种方法的优点/缺点是什么?你肯定不应该将你的财产定义为外键。每次您需要一个完整的模型时,您的数据库服务器将不得不进行数百次连接,从而破坏您的性能 如果几乎每次访问模型时都需要属性

我有一个拥有数百处房产的模型。属性可以是不同的类型(整数、字符串、上载的文件等)。我想一步一步地实现这个复杂的模型,从最重要的属性开始。我可以想出两个选择:

  • 将特性定义为常规模型字段
  • 定义一个单独的模型以分别保存每个属性,并使用
    外键将其链接到主模型

  • 对于如何使用django处理具有大量属性的模型,我没有找到任何建议。这两种方法的优点/缺点是什么?

    你肯定不应该将你的财产定义为外键。每次您需要一个完整的模型时,您的数据库服务器将不得不进行数百次
    连接
    ,从而破坏您的性能

    如果几乎每次访问模型时都需要属性,则应将它们保留在同一模型中。如果没有,您可以创建一个单独的
    属性
    模型,并通过
    OneToOneField
    将其链接到原始模型

    我个人有过这样的经历。我们必须建立一个酒店推荐引擎,那时我们正在使用。由于Drupal将每个自定义属性存储在一个单独的MySQL表中,我们很快意识到我们应该切换框架,因为每个查询都会使我们的生产服务器崩溃(20多个连接对MySQL来说是致命的)。顺便说一句,我们最终使用了一个基于的定制解决方案,它可以很好地处理数百个字段

    更新:如果您幸运地使用了最新版本的PostgreSQL,您可以利用存储将所有字段打包到单个模型字段中。但是请注意,您必须自己实现一个验证方案

    客户要求

    首先,我感受到你的痛苦,祝你一切顺利!我想重申一下,如果不是这样的话,您应该首先考虑更改它,因为在一个对象上永远不需要数百个属性,它通常表示需要数组、继承或单独的类等


    接下来,您将需要大量使用
    值_列表
    来仅从数据库返回实际需要的属性,因为这将严重影响性能

    因为您不能对模型做任何事情,所以应该尝试从设计方面解决性能问题。在你的网站上应该有大量的功能,这意味着你只需要从模型中返回一些值。这样一来,您选择的选项就没有多大区别了,因为返回的内容非常有限


    尽可能地过滤,并节省使用排序。

    您可以将它们分组到几个单独的模型中,通过OneToOneFields链接到主模型。这将“名称空间”您的数据,并且名称空间是“一个非常好的主意”。

    在编程中,一般来说,如果您的类有数百个字段,则可能需要重新考虑(继承、单独的类等)@Sayse:customer requirement。我绝对不会重新考虑他们的建筑。