Django中的自定义用户模型?

时间:2015-04-12 22:27:33

标签: python django django-models django-orm

我知道如何制作自定义用户模型,我的问题是关于风格和最佳做法。

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

例如,如果我的UserProfile模型与User一对一,我应该创建friends关系(这只是我的应用专用) UserProfileUser之间?

此外,所有第三方软件包都依赖于get_user_model(),因此如果我不使用自定义用户模型,您的所有关系都应该转到User,对吧?但我仍然无法向User添加方法,因此如果Userfriends关系,并且我想添加recent_friends方法,我应该将此方法添加到UserProfile。这对我来说有点不协调。

如果有经验的Django能够给出明确的见解,我会很高兴。

2 个答案:

答案 0 :(得分:1)

我肯定会建议使用自定义用户模型 - 即使您使用配置文件一对一。如果您已经提交到默认用户模型,那么迁移到自定义用户模型是非常困难的,并且几乎总是需要向用户模型添加至少一些自定义逻辑。< / p>

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

答案 1 :(得分:1)

  

所有第三方软件包都依赖于get_user_model(),所以看起来如果我不使用自定义用户模型,那么你的所有关系应该转到User,对吧?但是我仍然无法向User添加方法,所以如果User有朋友关系,并且我想添加recent_friends方法,我应该将此方法添加到UserProfile。

我过去曾经走过“一对一”的路线而且我最终根本不喜欢我的应用程序的设计,在我看来它迫使你远离SOLID。所以,如果我是你,我宁愿继承AbstractBaseUserAbstractUser

使用AbstractBaseUser,您只需提供User的核心实现,然后您可以根据您的要求扩展模型。 根据您使用的第三方软件包,您可能需要的不仅仅是核心实现:如果是这种情况,只需扩展AbstractUser,这样就可以扩展User的完整实现。