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.py
Django 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
...
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
Thực hiện với 'user.groups.add (g)'. –