从django-allauth中删除“用户名”字段

时间:2013-10-30 13:09:55

标签: django django-allauth

当django-registration不支持django 1.5和自定义用户模型时。我正在尝试使用django-allauth,从最初看它是很棒的产品。

问题我有 - 需要用户名字段,但在我的应用程序中我没有用户名。所以,allauth文档说:

**Available settings:**
ACCOUNT_AUTHENTICATION_METHOD (="username" | "email" | "username_email")

指定要使用的登录方法 - 用户是否通过输入用户名,电子邮件地址或其中任何一个来登录。

好的,我完成了,并且收到了错误:

AssertionError at /accounts/signup/
No exception supplied

models.py:

class MyUser(AbstractBaseUser, PermissionsMixin):
    title = models.CharField ('Name', max_length=100)
    email = models.EmailField('Email', max_length=255, unique=True)
    ...

settings.py

ACCOUNT_USERNAME_REQUIRED = False
ACCOUNT_AUTHENTICATION_METHOD = ('email')
AUTH_USER_MODEL = 'internboard.MyUser'

我做错了什么?

3 个答案:

答案 0 :(得分:41)

谢谢,我找到了正确的设置:

ACCOUNT_AUTHENTICATION_METHOD = 'email'
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_UNIQUE_EMAIL = True
ACCOUNT_USERNAME_REQUIRED = False

答案 1 :(得分:7)

如果您在堆栈跟踪中遇到django.core.exceptions.FieldDoesNotExist: Account has no field named 'username'时遇到错误USER_MODEL_USERNAME_FIELD,则还需要将ACCOUNT_USER_MODEL_USERNAME_FIELD设置为None(或者适当的字段)用例)。所需的全套设置如下:

ACCOUNT_AUTHENTICATION_METHOD = 'email'
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_UNIQUE_EMAIL = True
ACCOUNT_USER_MODEL_USERNAME_FIELD = None
ACCOUNT_USERNAME_REQUIRED = False

Custom User Models的django-allauth文档更详细地解释了此设置,Configuration中列出了默认值。

答案 2 :(得分:0)

自定义用户模型的可能原因可能是以下任意一种;

a)如果您已在模型中完全淘汰了“用户名”作为字段,那么请确保在模型中定义变量:

               USERNAME_FIELD = 'email'

还要确保在电子邮件的字段定义中,字段属性;

              unique = True

也包括在内。

b)在自定义用户admin(必须强制配置)中,必须将form和add_form变量定义为继承自“ ModelForm”或UserCreationForm(对于add_form变量)。

c)如果您要继承allauth的注册表单,则必须在设置中声明:

 ACCOUNT_USER_MODEL_USERNAME_FILED = None

最重要的是,确保编写测试以确保表单发布数据并将其保存到数据库。谢谢。希望有人能对此有所帮助.....请记住,这可能很难,但绝不可能!!!快乐的“ Djangoing”。...