Django 中的自定义用户模型?
Custom user model in Django?
我知道如何制作自定义用户模型,我的问题是关于样式和最佳实践。
Django 中自定义用户模型的后果是什么?使用辅助一对一模型真的更好吗?
例如,如果我有一个与 User
一对一的 UserProfile
模型,我是否应该创建 friends
关系(这仅特定于我的应用程序) 在 UserProfile
之间或 User
之间?
而且所有第 3 方包都依赖于 get_user_model()
,所以如果我不使用自定义用户模型,你所有的关系都应该转到 User
,对吗?但是我还是不能给User
添加方法,所以如果User
有friends
关系,我想添加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。所以如果我是你,我宁愿继承 AbstractBaseUser
或 AbstractUser
.
AbstractBaseUser
只提供 User
的核心实现,然后您可以根据需要扩展模型。
根据您使用的第 3 方包的类型,您可能需要的不仅仅是核心实现:如果是这种情况,只需扩展 AbstractUser
即可扩展 User
.[=17 的完整实现=]
我知道如何制作自定义用户模型,我的问题是关于样式和最佳实践。
Django 中自定义用户模型的后果是什么?使用辅助一对一模型真的更好吗?
例如,如果我有一个与 User
一对一的 UserProfile
模型,我是否应该创建 friends
关系(这仅特定于我的应用程序) 在 UserProfile
之间或 User
之间?
而且所有第 3 方包都依赖于 get_user_model()
,所以如果我不使用自定义用户模型,你所有的关系都应该转到 User
,对吗?但是我还是不能给User
添加方法,所以如果User
有friends
关系,我想添加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。所以如果我是你,我宁愿继承 AbstractBaseUser
或 AbstractUser
.
AbstractBaseUser
只提供 User
的核心实现,然后您可以根据需要扩展模型。
根据您使用的第 3 方包的类型,您可能需要的不仅仅是核心实现:如果是这种情况,只需扩展 AbstractUser
即可扩展 User
.[=17 的完整实现=]