【问题标题】:Remove 'username' field from django-allauth从 django-allauth 中删除“用户名”字段
【发布时间】:2013-11-10 01:57:01
【问题描述】:

当 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'

我做错了什么?

【问题讨论】:

    标签: django django-allauth


    【解决方案1】:

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

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

    【讨论】:

    • 嗨 Rukomoynikov,您是否必须制作自己的用户模型才能使其工作?如果是这样,它到底是什么样子(如果你愿意分享的话)?
    • 来自官方文档的更多最新资源。 django-allauth.readthedocs.org/en/latest/…
    • 唯一的问题是,如果用户使用 facebook 注册,他们在 Django 用户帐户中没有用户名。
    【解决方案2】:

    如果您在堆栈跟踪中遇到错误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 中列出了默认值。

    【讨论】:

    • 非常感谢,这修复了 FieldDoesNotExist 错误
    【解决方案3】:

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

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

                   USERNAME_FIELD = 'email'
    

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

                  unique = True
    

    也包括在内。

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

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

     ACCOUNT_USER_MODEL_USERNAME_FILED = None
    

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

    【讨论】:

      猜你喜欢
      • 2018-09-11
      • 2011-11-23
      • 2019-01-14
      • 2016-10-29
      • 1970-01-01
      • 2019-12-30
      • 2013-09-17
      • 2021-12-08
      • 2018-06-13
      相关资源
      最近更新 更多