2013-05-02 15 views
5

AbstractBaseUserという拡張子のユーザーアプリケーションMyUserを作成しました。私は、モデルMyUserは限りそれは=「profile.MyUser」Django 1.5:AbstractBaseUserと権限の理解

私のトラブルは、私が設定できないということになりましたsettings.py

AUTH_PROFILE_MODULEに記載されているように、標準Auth.User置換するという印象の下にありましたMyUserモデルに登録されているユーザーのアクセス許可。グループメンバーシップとアクセス許可を設定しようとすると、エラーUser' instance expected, got <MyUser: username>が表示されます。

ユーザーモデルのユーザーをアクセス許可とグループに追加する方法を教えてください。

class MyUserManager(BaseUserManager): 
    def create_user(self, username, email, phone, password=None, company=False): 
     if not email: 
      raise ValueError('Users must have an email address') 
     if not username: username = email.split('@')[0] 
     user = self.model(
      email=MyUserManager.normalize_email(email), 
      username=username,phone=phone,) 
     user.set_password(password) 
     user.save(using=self._db) 

     # add to user group and set permissions 
     if company: 
      g = Group.objects.get(name='company') 
      p = Permission.objects.get(codename='add_company') 
     else: 
      g = Group.objects.get(name='user') 
      p = Permission.objects.get(codename='add_user') 
     g.user_set.add(user) 
     user.user_permissions.add(p) 
     return user 

class MyUser(AbstractBaseUser): 
    username = models.CharField(max_length=254, unique=True, blank=True, null=True) 
    email = models.EmailField(max_length=254, unique=True, db_index=True) 
    phone = models.CharField(_('Phone Number'), max_length=25, blank=True, null=True,) 

    is_active = models.BooleanField(default=True) 
    is_admin = models.BooleanField(default=False) 
    USERNAME_FIELD = 'email' 
    REQUIRED_FIELDS = ['phone'] 

    objects = MyUserManager() 

    def get_full_name(self): 
     return self.email 
    ... 

答えて

8

モデルの宣言にPermissionsMixinを追加するだけです。 :)

class MyUser(AbstractBaseUser, PermissionsMixin): 
    ... 

ここにはDjangoドキュメントのrelevant partがあります。

+0

ユーザーのグループレベルを設定するにはどうすればよいですか。 'g.user_set.add(user)'で設定すると、 'TypeError: 'User'インスタンスが予想され、'がエラーメッセージとして返されます。 – neurix

+1

'user.groups.add(g)'でそれを行います。 –