繁体   English   中英

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

[英]Remove 'username' field from 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

模型.py:

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

设置.py

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

我在做什么错?

谢谢,我找到了适合我的任务的正确设置:

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

如果您遇到错误django.core.exceptions.FieldDoesNotExist: Account has no field named 'username' with reference USER_MODEL_USERNAME_FIELD in the stacktrace,您还需要将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

此设置在自定义用户模型的 django-allauth 文档中有更详细的解释,默认设置在Configuration 中概述。

对于自定义用户模型,可能的原因可能是以下任何一种;

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

               USERNAME_FIELD = 'email'

另外,请确保在电子邮件的字段定义中,字段属性;

              unique = True

也包括在内。

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

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

 ACCOUNT_USER_MODEL_USERNAME_FILED = None

最重要的是,确保您编写测试以确保表单发布数据并保存到数据库。 谢谢。 希望有人觉得这有帮助..... 请记住,这可能很难,但永远不可能!!! 快乐'Djangoing'....

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM