Django 中的自定义用户模型?

Custom user model in Django?

我知道如何制作自定义用户模型,我的问题是关于样式和最佳实践。

Django 中自定义用户模型的后果是什么?使用辅助一对一模型真的更好吗?

例如,如果我有一个与 User 一对一的 UserProfile 模型,我是否应该创建 friends 关系(这仅特定于我的应用程序) 在 UserProfile 之间或 User 之间?

而且所有第 3 方包都依赖于 get_user_model(),所以如果我不使用自定义用户模型,你所有的关系都应该转到 User,对吗?但是我还是不能给User添加方法,所以如果Userfriends关系,我想添加recent_friends方法,我应该把这个方法添加到UserProfile。这对我来说看起来有点不一致。

如果有 Django 经验的人能给出清晰的见解,我会很高兴。

我肯定会推荐使用自定义用户模型 - 即使您使用一对一的配置文件。如果您致力于使用默认用户模型,那么迁移到自定义用户模型会非常困难,而且几乎总是有一点您希望至少向用户模型添加一些自定义逻辑。

您是使用配置文件还是进一步扩展用户模型,然后应基于通常适用于您的数据库结构的所有注意事项。正确的™决定取决于您的个人资料的确切细节,只有您知道。

Also all 3rd-party packages rely on get_user_model(), so looks like if I don't use custom user model, all your relations should go to User, right? But I still can't add methods to User, so if User has friends relation, and I want to add recent_friends method, I should add this method to UserProfile.

我过去曾走 "one-to-one" 路线,结果我根本不喜欢我的应用程序的设计,在我看来,它迫使你远离 SOLID。所以如果我是你,我宁愿继承 AbstractBaseUserAbstractUser.

AbstractBaseUser 只提供 User 的核心实现,然后您可以根据需要扩展模型。 根据您使用的第 3 方包的类型,您可能需要的不仅仅是核心实现:如果是这种情况,只需扩展 AbstractUser 即可扩展 User.[=17 的完整实现=]