如何覆盖Django中的默认用户模型字段?

Daw*_*wid 5 django django-models

问题是默认用户模型没有给字段提供一些非常有用的选项,例如unique = True到电子邮件字段.

我读到了这个问题:覆盖默认的用户模型方法,并检查了代理模型概念,但没有效果.

起初我尝试过:

from django.contrib.auth import models
class User(models.User):
    class Meta:
        proxy = True
    email = EmailField('e-mail address', unique=True, blank=False)
Run Code Online (Sandbox Code Playgroud)

结果导致:

django.core.exceptions.FieldError: Proxy model 'User' contains model fields.
Run Code Online (Sandbox Code Playgroud)

接下来是:

from django.contrib.auth import models
class User(models.User):
    class Meta:
        proxy = True
    models.User.email = EmailField('e-mail address', unique=True, blank=False)
Run Code Online (Sandbox Code Playgroud)

而这个"解决方案"根本没有效果.默认用户模型的行为与以前相同.

我只对非猴子修补解决方案感兴趣.

编辑:好的.猴子修补对我来说是可以接受的,但是如何合理地做到这一点呢?(我的意思是不更改位于的文件/usr/pyshared/python2.6/...)

mic*_*ael 3

已经有人问过... How to make email field unique in model User from contrib.auth in Django

另外,附加用户数据的 django 方法位于http://docs.djangoproject.com/en/dev/topics/auth/#auth-profiles

我并不完全喜欢这种方法,也很欣赏你的出身,但有时你必须随波逐流。