8

誰かがこの質問をこの質問の複製としてマークする前に、djangoのauth_user.usernameをvarchar(75)にすることはできますか?どうすればそれができますか?またはSOに関する他のそのような質問については、この質問をお読みください。私がリンクした質問はこの質問を正確に尋ねますが、残念ながら答えは尋ねられた質問に対応していません。

次のようにして、auth_user.usernameフィールドを100文字の長さに変更できますか?

  1. ユーザー名フィールドに対してDBでALTERテーブルを実行します
  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をより高いバージョンに更新したときにこれが壊れることは問題ではありません。他の認証方法を書くことも考えていません。これを行うと、何かが壊れるかどうかを知りたいだけです。

4

7 に答える 7

20

モデルフィールドの説明、フォームフィールドの説明、および最大長バリデーターなど、いくつかの場所で最大長にモンキーパッチを適用する必要があります。最大長のバリデーターは、モデルフィールドだけでなくフォームフィールドにもアタッチされます。

これがコードスニペットで、すべてにパッチが適用されます。

https://gist.github.com/1143957(django 1.2および1.3でテスト済み)

更新:朗報です!django 1.5以降、ユーザーモデルをオーバーライドできます。ユーザーモデルのカスタマイズ

于 2011-01-28T18:02:13.583 に答える
1

ユーザープロファイルモデルを作成し、そこに非常に長いユーザー名フィールドを追加して使用します。もちろん、これにより本物のユーザー名フィールドは役に立たなくなりますが、Djangoコードをハッキングするよりもはるかに優れており、アップグレードが必要になったときに問題が発生します。

于 2011-01-28T18:48:12.727 に答える
1

それをしても害はありません。モデルとデータベースで長さを変更するだけです:)

于 2011-01-28T14:19:39.073 に答える
1

私にとって、以下のコードは機能し、単純です。

from django.contrib.auth.models import AbstractUser

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

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

移行を実行できるようになった後

于 2014-10-21T11:56:16.640 に答える
0

データベースとそれに応じてモデルを手動で変更する場合は、問題はありません。

それ以外の場合は元に戻すこともできます。万が一の場合に備えてバックアップを作成すると思いますが、それが必要かどうかはわかりません。

于 2011-01-28T12:07:51.880 に答える
0

将来のニーズのために、これは私が見つけた最良かつ最も簡単な方法です:

https://github.com/GoodCloud/django-longer-username

于 2013-10-10T23:55:05.453 に答える
0

もう1つの解決策は、認証コードを変更することです。新しいユーザーがサインアップすると、電子メールを入力します。これを電子メールフィールドに保存して保持し、電子メールが30文字を超える場合は、ユーザーフィールドに入力する前に短縮します。次に、新しいログインのログイン認証を変更します。

于 2014-09-16T19:06:05.993 に答える