【问题标题】:how can i add phone number field from class profile to class user?如何将班级资料中的电话号码字段添加到班级用户?
【发布时间】:2020-10-19 04:23:01
【问题描述】:

我需要将电话号码添加到所需型号的字段中,所以我正在这样做,但无法正常工作 所以如果每个人都知道如何添加电话号码,请帮助我:

#models.py

    from django.db import models
        from django.contrib.auth.models import AbstractBaseUser, BaseUserManager
        from phonenumber_field.modelfields import PhoneNumberField
        
        
        class UserManager(BaseUserManager):
            def create_user(self, phone_number, email, password=None, is_active=True, is_staff=False, is_admin=False):
                if not email:
                    raise ValueError("User Must have an Email Address")
                if not password:
                    raise ValueError("User Must have a Password")
                if not phone_number:
                    raise ValueError("User Must have a Phone Number")
                user_obj = self.model(email=self.normalize_email(email))
                user_obj.set_password(password)  # change user password
                user_obj.phone_number(phonenumber_field)
                user_obj.staff = is_staff
                user_obj.active = is_active
                user_obj.admin = is_admin
                user_obj.save(using=self._db)
                return user_obj
        
            # staff user
            def create_staffuser(self, email, password=None):
                user = self.create_user(
                    email,
                    password=password,
                    phone_number=PhoneNumberField,
                    is_staff=True
                )
                return user
            # admin user
        
            def create_superuser(self, email, password=None):
                user = self.create_user(
                    email,
                    password=password,
                    phone_number=PhoneNumberField,
                    is_staff=True,
                    is_admin=True
                )
                return user
        
        
        class User(AbstractBaseUser):
            email = models.EmailField(max_length=255, unique=True)
            # full_name = models.CharField(max_length=255, blank=True, null=True)
            active = models.BooleanField(default=True)  # can log in
            staff = models.BooleanField(default=False)  # staff user non super user
            admin = models.BooleanField(default=False)  # super user
            timestamp = models.DateTimeField(auto_now_add=True)
            phone_number = PhoneNumberField()
        
            USERNAME_FIELD = 'email'  # username
            REQUIRED_FIELDS = []  # FULL_NAME
            object = UserManager()
        
            def __str__(self):
                return self.email
        
            def get_full_name(self):
                return self.email
        
            def get_short_name(self):
                return self.email
        
            def has_perm(self, perm, obj=None):
                return True
        
            def has_module_perms(self, app_label):
                return True
        
            @property
            def is_staff(self):
                return self.staff
        
            @property
            def is_admin(self):
                return self.admin
        
            @property
            def is_active(self):
                return self.active
        
        
        class Profile(models.Model):
            user = models.OneToOneField(User, on_delete=models.CASCADE)

我想在班级资料中添加电话号码并将其包含在用户班级的必填字段中,但我不能

每次我遇到错误:raise TypeError("Can't convert %s to PhoneNumber." % type(value).name) TypeError:无法将 int 转换为 PhoneNumber。

【问题讨论】:

    标签: django class model phone-number


    【解决方案1】:

    您不能将 ModelField 类添加到属性。而是尝试通过方法参数传递值。根据documentation,如果需要该字段,您应该能够传递该值。

    所以,像这样更新你的管理器方法:

    class UserManager(BaseUserManager):
        def create_user(self, email, phone_number, password=None, is_active=True, is_staff=False, is_admin=False):
            if not email:
                raise ValueError("User Must have an Email Address")
            if not password:
                raise ValueError("User Must have a Password")
            if not phone_number:
                raise ValueError("User Must have a Phone Number")
            user_obj = self.model(email=self.normalize_email(email))
            user_obj.set_password(password)  # change user password
            user_obj.phone_number = phone_number
            user_obj.staff = is_staff
            user_obj.active = is_active
            user_obj.admin = is_admin
            user_obj.save(using=self._db)
            return user_obj
    
        # staff user
        def create_staffuser(self, email, phone_number, password=None):
            user = self.create_user(
                email,
                password=password,
                phone_number=phone_number,
                is_staff=True
            )
            return user
        # admin user
    
        def create_superuser(self, email, phone_number, password=None):
            user = self.create_user(
                email,
                password=password,
                phone_number=phone_number,
                is_staff=True,
                is_admin=True
            )
            return user
    

    并将phone_number添加到模型中的必填字段:

    REQUIRED_FIELDS = ['phone_number']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-23
      • 2019-04-26
      • 2019-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多