我需要为我的Django项目中的每个用户附加大量附加属性。其中一些属性是简单的CharFields,其他的则更复杂ManyToManyFields。对我来说麻烦的是,在我挖掘方法来做到这一点时,我发现了两个选择:文档中解释的The user profile method和我看到在互联网上浮动的user subclassing method。在Django中处理额外用户数据的正确方法?
他们都看起来很复杂,我宁愿不选择一个,只发现我经过几个月的发展需要回去切换到另一种方法,所以我在这里问。 权利哪种方式?
我也在为此而战。配置文件会添加额外的不需要的图层,而子分类会在数据库中创建额外的不需要的表格(我相信),并且不会对'request.user'使用多余的修改。这似乎是这样一个常见的情况,你会认为会有一个明确的,很好的方式来做到这一点。其他框架遵循“级联”而不是“覆盖”的范式,您可以轻松扩展所有基类,并且只需让它们工作,但不会,这太方便了。 – mpen 2009-12-20 23:08:06
如果您希望User类拥有所有额外的字段,那么在同步数据库时可以使用它,但这需要一些额外的工作。您只需在特定模型中添加字段并手动更改数据库表。它不漂亮,但没有不需要的图层和表格。您只需编写: User.division = ForeignKey('Division') 然后将适当的列添加到表中。但是我相信这会是我自己的受虐狂;-)子类很好,特别是ORM会隐藏你的两张表。 – gruszczy 2009-12-20 23:11:36
@gruszyczy:如您所说,可以简单地将附加字段monkeypatch到现有模型上。但是你的代码被破坏了。你必须这样做才能正确地设置字段:models.ForeignKey('Division')。contribute_to_class(User,'division') – 2009-12-21 23:21:17