0

Djangoauthにはusernameフィールドとfirst_nameフィールドがあります。ただし、usernameにはフィールドオプションunique=Trueがあります。これにより、ユーザーが登録時にusernameと同じfirst_nameを指定できなくなり、IntegrityErrorが発生します。これを回避し、ユーザー名を一意に保つ方法は?すなわち。2人のユーザーが同じユーザー名を持つことはできません。ただし、usernameはfirst_nameと同じにすることができます。また、2人のユーザーが同じfirst_name、last_nameを持つことができます。

4

2 に答える 2

1

あなたはそれを達成することはできません。フィールドfirst_nameとusernameに同じ値を設定したいが、一方が一意でない場合、もう一方も一意にすることはできません。

私がここで何をしているのかを理解している限り、usernameの代わりにfirst_nameを表示したいだけです。これを実現するには、.{{ user.first_name }}の代わりにuseを使用し{{ user }}ます。ユーザーに関する追加情報を保存する必要がある場合は、独自のメソッドを実装できるプロファイルを定義することもできます。__str__

于 2012-08-05T09:00:03.003 に答える
1

first_nameユーザー名として使用されるカスタム認証バックエンドを実装する必要があります。

username登録時に、常に使用するため、決して使用しないランダムなユーザー名を複製first_nameまたは生成できますfirst_name

あなたは世話をする必要があります

  • ユーザーの作成/登録中に作成を行います。
  • ユーザー名(この場合は名)は一意である必要があります

認証バックエンドのコードは次のようになります(これは単なるサンプルコードです)。

def authenticate(self, username=None, password=None):
    try:
        user = User.objects.get(first_name=username)
        if user.check_password(password):
            return user
    except User.DoesNotExist:
        return None 

認証バックエンドの作成を参照してください。

emailを使用して認証を参照できる、ユーザーによる認証方法の例はかなりありますfirst_name

于 2012-08-05T09:39:58.123 に答える