2011-09-22 8 views

答えて

4

私はそうは思わない。しかし、あなたはDjangoのユーザproxifyすることができます:Djangoの1.4では

class MyUser(User): 
    class Meta: 
     proxy = True 

    def get_or_create(self, username, email, password, *args, **kwargs): 
     try: 
      new_user = User.objects.create_user(username, email, password) 
     except IntegrityError: 
      return User.objects.get(username=username, email=email) 
     else: 
      new_user.first_name = kwargs['first_name'] # or what you want 
      ...etc... 

     return new_user 
+1

@nuエベレストの答えをご覧ください。 –

14

を、get_or_create()は、ユーザーのために存在します。

from django.contrib.auth.models import User 

_user = User.objects.get_or_create(
     username=u'bob', 
     password=u'bobspassword', 
    ) 
+1

この例では、 '_user'は'(user_object、was_just_created) 'のタプルになります。 –

+4

これは、ユーザーのパスワードを正しく設定するものではありません。生の 'password'フィールドは、パスワードそのものではなく、塩漬けされたハッシュを保持します。新しく作成されたときに、ユーザに対して 'set_password()'を呼び出して、それを保存し直す必要があります。理想的ではない。ちなみに、あなたはたぶんそれをデフォルトのkwargに入れたいと思っていました。 @DavideR。 –

+0

これはDjango 1.4で正常に動作します。 –

1

他の理由で発生することができますようIntegrityErrorをキャッチしない方がよいです。パスワードを除いて、ユーザーが存在するかどうかを確認する必要があります。ユーザーが既に存在する場合は、パスワードを設定します。

user, created = User.objects.get_or_create(username=username, email=email) 
if not created: 
    user.set_password(password) 
関連する問題