是在django中定义自己的用户模型还是使用Django auth用户模型?

时间:2015-11-24 17:11:18

标签: python django

我从Django App架构设计开始,我的架构有UserProfile,UserFavourites和UserComments模型。 经过一些研究后我发现我们可以使用django自己的User模型,或者我们可以创建自己的用户模型,该模型将从AbstractUser延伸

Platform = Django 1.8.5

我发现了很多类似的问题,但是现在我有最新版本的Django框架有什么变化吗?

还需要了解每种方法的优缺点

2 个答案:

答案 0 :(得分:2)

从Django的文档中拉出来

  

如果您希望存储与用户相关的信息,您可以使用与包含这些字段的模型的一对一关系以获取其他信息。这种一对一模型通常称为配置文件模型,因为它可能存储有关网站用户的非身份验证相关信息

只需将您的额外用户字段添加到UserProfile模型即可。与您想要的每个模型建立一对一的关系

答案 1 :(得分:2)

在新项目中,强烈考虑使用自定义用户模型。

原因是如果您想稍后更改您的用户模型,那么有一种明确的方法(迁移)。但是,当您已经与auth-User建立了ForeignKey关系(等)时,从auth-User切换到自定义用户是一个主要痛苦(见下文)。考虑到在项目开始时很容易从你自己的模型开始(也许只是复制auth模型),没有理由不这样做。

文档说明了以后更改AUTH_USER_MODEL的难度:

  

警告

     

更改AUTH_USER_MODEL会对数据库结构产生很大影响。   它会更改可用的表,它会影响表   构建外键和多对多关系。如果你   打算设置AUTH_USER_MODEL,你应该在创建任何之前设置它   第一次迁移或运行manage.py迁移。

     

不支持在创建表后更改此设置   通过makemigrations,将导致您必须手动修复您的   schema,从旧用户表中移植数据,并可能手动移植   重新申请一些迁移。

     

警告

     

由于Django的动态依赖功能的限制   可交换模型,必须确保引用的模型   AUTH_USER_MODEL是在其应用程序的第一次迁移中创建的(通常是   叫做0001_initial);否则,您将遇到依赖性问题。

     

此外,运行时可能会遇到CircularDependencyError   你的迁移,因为Django将无法自动破解   由于动态依赖性导致的依赖循环。如果您看到此错误,   你应该通过移动你所依赖的模型来打破循环   用户模型进入第二次迁移(你可以尝试制作两个正常的   彼此有一个ForeignKey并看到如何的模型   如果你想看,makemigrations会解析循环依赖   它通常是怎么做的)

换句话说,如果您选择在项目开始时不使用AUTH_USER_MODEL,则以后几乎不可能更改。

有一个ticket #24370用于将自定义用户模型和AUTH_USER_MODEL设置添加到默认项目模板,并建议在文档中执行此操作。这张票只等着有人来实现它。