我从Django App架构设计开始,我的架构有UserProfile,UserFavourites和UserComments模型。
经过一些研究后我发现我们可以使用django自己的User
模型,或者我们可以创建自己的用户模型,该模型将从AbstractUser
延伸
Platform = Django 1.8.5
我发现了很多类似的问题,但是现在我有最新版本的Django框架有什么变化吗?
还需要了解每种方法的优缺点
答案 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设置添加到默认项目模板,并建议在文档中执行此操作。这张票只等着有人来实现它。