簡體   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