2011-07-21 19 views
5

我正在嘗試使用電子郵件獲取用戶名,並且幾乎完美地實現了它。我遵循這些方向:http://www.micahcarrick.com/django-email-authentication.html強制Django登錄表單接受超過30個字符的用戶名

問題是,我的登錄表單仍然拋出一個錯誤,說用戶名只能是30個字符。我已將輸入表單更改爲接受75個字符和數據庫表。但是Django中的某些東西仍然阻止了這一點。

任何想法?

UPDATE:

<form method="post" action="." class="full"> 
{% csrf_token %} 
<ul> 
    {% if form.non_field_errors %}<li>{{ form.non_field_errors }}</li>{% endif %} 
    <li> 
     {{ form.username.errors }} 
     <label for="id_username">Email/Username</label> 
     <input type="text" id="id_username" name="username" maxlength="75"> 
    </li> 
    <li> 
     {{ form.password.errors }} 
     <label for="id_password">{{ form.password.label }}</label> 
     {{ form.password }} 
    </li> 
</ul> 
<input type="submit" value="Login"> 
<a href="{% url django.contrib.auth.views.password_reset %}">Forgot your password?</a> 
</form> 
+0

@Brenden:究竟是在修訂後的'什麼Form'你使用?請**更新**問題以包含表格課程。有沒有一種乾淨的方法可以截斷長輸入? –

+1

爲了檢查,您是否將django.contrib.auth.models.User中的用戶名字段長度從30更改爲75,然後從數據庫中刪除舊的驗證表,通過運行manage獲取新鮮的SQL以創建驗證表。 py sqlall,並執行此SQL以創建具有更新字段長度的新表? –

回答

4

最後,我加入這解決了這個我的頂級初始化

# Added so the login field can take email addresses longer than 30 characters 
from django.contrib.auth.forms import AuthenticationForm 

AuthenticationForm.base_fields['username'].max_length = 150 
AuthenticationForm.base_fields['username'].widget.attrs['maxlength'] = 150 
AuthenticationForm.base_fields['username'].validators[0].limit_value = 150 
0

只是爲了檢查,你改變django.contrib.auth.models.User 30名的字段長度75,然後從數據庫中刪除舊錶的權威性,抓住新鮮的SQL通過運行manage.py sqlall創建auth表,並執行這個SQL來創建具有更新字段長度的新表?

(由於這只是一個跟進的問題,我會留在評論,但還沒有經歷足夠的代表尚未...)

+1

我認爲缺少的步驟是在django.contrib.auth.models中將用戶從30更改爲75.我會在哪裏放置代碼,而無需觸摸實際的django代碼? – Brenden