Django - 从用户模型中删除用户名

Azi*_*ari 3 django django-users

为了在Django 1.5.x中创建新的用户模型,有两种方法:

  1. 继承AbstractUser类,它是您获得的默认用户模型,这样您就可以使用所需的任何属性扩展它.但是,如果要删除任何字段,则技术上可行,但不建议使用 ; 我相信,即使可以做到,也违背了OOP原则.因此,如果您想要更改当前的用户模型,则有第二种方法.
  2. 继承AbstractBaseUser,通过查看代码提供了非常基本的功能.除非从默认的Django用户模型中复制它,否则您将错过权限,配置文件检索和绝对URL构造的所有优点.

以上是我对情况的理解.如果我错了,请纠正我,但这并不意味着如果我想简单地username从模型中删除该字段,因为我根本不需要它,我必须复制粘贴框架中提供的模型代码和继承AbstractBaseUserPermissionsMixin?对于这么简单的事情,这种方法对我来说看起来并不是很漂亮,而且它看起来有点奇怪,因为我很确定自定义用户模型的引入主要是因为email字段的流行用例作为用户标识符而不是username.

请你的想法(和更正).

Azi*_*ari 6

我在Django的谷歌集团中创建了一个新讨论,结果很长.

这最终变成了Django的一个wiki页面,用解决它的不同方法解决了这个问题.还有一张门票刚刚开张.


Han*_*ody 5

如果您查看该django.contrib.auth.models文件的源代码,那么您将看到AbstractUser该类的定义相当短并且如下所示:

class AbstractUser(AbstractBaseUser, PermissionsMixin):
    ...
Run Code Online (Sandbox Code Playgroud)

它继承自AbstractBaseUserPermissionMixin.您可以定义自定义模型,并从提到的类继承它以获得权限支持.如果你想要所有其他模型字段,那么你需要复制它们,但它也是一个定制符合你需求的东西的机会.

  • 我从可重用性的角度来看它,使用`email`作为主要用户字段是很常见的,为了做到这一点,您将需要做您提到的事情,这在某种程度上是解决常见问题的长久之计。进一步概括化AbstractUser,并允许其子类在username或email之间进行选择是一个更好的主意。 (2认同)