[英]Number of attributes in Django Models
我搜索了很多东西,却没有找到我想要的东西。
在Django中,模型类的最佳概念是什么?
要扩展User,最好有一个带有多个属性的类,或者将这个类分解为几个带有几个属性的类? 我现在正在使用django ORM。
假设我有一个名为Person的类可以扩展User,那会更好:
class Person(models.Model):
user = foreingkey(User)
attribute1 =
...
attributeN =
或者,这样做会更好:
class PersonContac(models.Model):
user = foreingkey(User)
attribute1 =
...
attribute3 =
class PersonAddress(models.Model):
user = foreingkey(User)
attribute1 =
...
attribute3 =
class PersonHobby(models.Model):
user = foreingkey(User)
attribute1 =
...
attribute3 =
我的每个视图都将使用较小类的数据(可能)。
随着时间的流逝,at亵人数会扩大。
我想做的是一次,然后触摸最小的可能性。 用户可以填写各种属性,而并非必需。 用户数量是不确定的(可以很多)。
我对长期性能和维护感到担忧。
如果有人可以解释我,那对我的代码会更好,以及为什么。 使用Django ORM,总的来说会更好(更少的类/更多的属性,或者更多的类/更少的属性)。
最好是,我的视图仅使用一个模型类的数据,或者没有(或几乎没有)区别?
编辑:
在急于写作的时候,我在课堂上使用了坏名字。 这些属性都不是“多对多”字段,“用户”每个属性只有一个值,即为空白。
属性的数量可以随着时间的流逝而扩展,但数量却不多。
将仅特定于一个用户的任何数据直接放入模型中。 可能是“名称”,“生日”之类的东西。
不过,使用单独的模型可能会更好地解决某些问题。 例如,多个人可能具有相同的兴趣爱好,或者一个用户可能具有多个兴趣爱好。 使它成为一个单独的类,并在必要时使用ForeignKeyField或ManyToManyField。
无论您选择什么,真正的诀窍是优化数据库查询的数量。 django-debug-toolbar在这里很有帮助。
默认情况下,拆分模型将导致多个数据库查询,因此请务必仔细阅读与精简相关的select 。
检索查询集时,还要看看defer方法。 如果您知道不会在特定视图中使用这些字段,则可以排除其中一些不必要的字段。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.