2013-05-02 40 views
5

Tôi đã tạo một ứng dụng người dùng MyUser là một phần mở rộng của AbstractBaseUser. Tôi đã theo ấn tượng rằng mô hình MyUser sẽ thay thế các tiêu chuẩn Auth.User, miễn là nó được đề cập trong settings.pyDjango 1.5: Hiểu biết về AbstractBaseUser và các quyền

AUTH_PROFILE_MODULE = 'profile.MyUser'

rắc rối của tôi bây giờ là tôi không thể thiết lập quyền cho người dùng đã đăng ký trong mô hình MyUser. Khi tôi cố gắng đặt thành viên nhóm và quyền, tôi nhận được lỗi User' instance expected, got <MyUser: username>.

Làm cách nào để thêm người dùng của mô hình người dùng vào quyền và nhóm chính xác?

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 
    ... 

Trả lời

8

Chỉ cần thêm PermissionsMixin vào khai báo mô hình của bạn! :)

class MyUser(AbstractBaseUser, PermissionsMixin): 
    ... 

Đây là relevant part tài liệu Django.

+0

Làm cách nào để đặt cấp nhóm cho người dùng? Khi tôi thiết lập nó với 'g.user_set.add (user)', tôi nhận được trường hợp 'TypeError: 'User' được mong đợi, đã nhận lại ' làm thông báo lỗi. – neurix

+1

Thực hiện với 'user.groups.add (g)'. –

Các vấn đề liên quan