2011-01-28 46 views
7

在有人將此問題標記爲此問題的複製Can django's auth_user.username be varchar(75)? How could that be done?或其他此類問題之前,請閱讀此問題。我提到的問題恰恰提出了這個問題,但不幸的是答案沒有解決被問到的問題。我可以將Django的auth_user.username字段更改爲100個字符而不會破壞任何內容嗎?

我可以更改auth_user.username字段設置爲長100個字符通過執行以下操作:這裏

  1. 運行alter table在數據庫用戶名字段
  2. 更改MAX_LENGTH:username = models.CharField(_('username'), max_length=30, unique=True, help_text=_("Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"))

如果我要這樣做,它會破壞Django中的任何東西嗎?

,這將打破當我更新的Django到一個更高的版本是沒有問題的。我也沒有考慮寫其他的身份驗證方法。我只是想知道如果我這樣做會破壞任何東西。

+0

的http://計算器。com/questions/2610088/can-djangos-auth-user-username-be-varchar75-how-could-done- – 2012-08-08 15:54:15

+0

@tolomea OP已經發布該鏈接並閱讀它。 – Medorator 2014-06-08 18:26:38

回答

20

您需要在多個位置使用猴子補丁最大長度:模型字段的描述,表單字段描述和最大長度驗證程序。最大長度驗證器附加到表單字段以及模型字段。

下面的代碼片段,這將補丁一切:

https://gist.github.com/1143957(Django的1.2和1.3測試)

更新: 好消息!由於django 1.5你可以覆蓋用戶模型:Customizing the User model

+0

+1不錯的一個。另一篇文章解釋了這個過程,但不是**你將不得不重寫默認的django表單驗證。 – 2011-01-28 19:31:03

+0

很感謝。讓我試試這個。 – 2011-01-29 10:24:30

0

如果您手動更改數據庫以及相應的模型,那麼應該沒有問題。

你也可以改變回來,否則,我會說,做一個備份,以防萬一,但我不知道它甚至不需要

+0

只是好奇。你有沒有嘗試過嗎? – 2011-01-28 12:11:19

1

中有這樣做沒有壞處。 只需更改模型和數據庫中的長度:)

1

創建一個用戶配置文件模型,在那裏添加你很長的用戶名字段,並使用它。當然這會使真正的用戶名字段無用,但它比黑客Django代碼好得多,這會在您需要升級時遇到麻煩。

0

另一種解決方案是改變你的驗證碼。當新用戶註冊時,他們會輸入一封電子郵件,將其保存在電子郵件字段中,以便您擁有該電子郵件地址,並且如果電子郵件地址超過30個字符,則在將其放入用戶字段之前將其縮短。然後,更改新登錄的登錄身份驗證。

1

對我來說,下面的代碼工作,很簡單。

from django.contrib.auth.models import AbstractUser 

class MyUser(AbstractUser): 
    .... 
    # your custom fields 

MyUser._meta.get_field('username').max_length = 255 # or 100 

後,你可以運行遷移

相關問題