コード例 #1
0
class User(AbstractBaseUser, PermissionsMixin):
    username_validator = UnicodeUsernameValidator()

    username = models.CharField(
        _('username'),
        max_length=150,
        unique=True,
        help_text=
        _('Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.'
          ),
        validators=[username_validator],
        error_messages={
            'unique': _("A user with that username already exists."),
        },
    )
    email = models.EmailField(_('email address'), unique=True, blank=True)

    is_staff = models.BooleanField(
        _('staff status'),
        default=False,
        help_text=_(
            'Designates whether the user can log into this admin site.'),
    )
    is_active = models.BooleanField(
        _('active'),
        default=True,
        help_text=_(
            'Designates whether this user should be treated as active. '
            'Unselect this instead of deleting accounts.'),
    )
    is_student = models.BooleanField(default=False)
    is_business = models.BooleanField(default=False)

    date_joined = models.DateTimeField(_('date joined'), default=timezone.now)

    objects = UserManager()

    EMAIL_FIELD = 'email'
    USERNAME_FIELD = 'username'
    REQUIRED_FIELDS = ['email']

    class Meta:
        verbose_name = _('user')
        verbose_name_plural = _('users')

    def clean(self):
        super().clean()
        self.email = self.__class__.objects.normalize_email(self.email)

    def email_user(self, subject, message, from_email=None, **kwargs):
        """Send an email to this user."""
        send_mail(subject, message, from_email, [self.email], **kwargs)

    def get_user(self):
        if self.is_student:
            return Student.objects.get(user_id=self.id)
        if self.is_business:
            return Business.objects.get(user_id=self.id)
コード例 #2
0
ファイル: models.py プロジェクト: juniorfelix998/drf-todo
class User(AbstractBaseUser, PermissionsMixin, TrackingModel):
    """
        An abstract base class implementing a fully featured User model with
        admin-compliant permissions.

        Username and password are required. Other fields are optional.
        """
    username_validator = UnicodeUsernameValidator()

    username = models.CharField(
        _('username'),
        max_length=150,
        unique=True,
        help_text=
        _('Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.'
          ),
        validators=[username_validator],
        error_messages={
            'unique': _("A user with that username already exists."),
        },
    )
    email = models.EmailField(_('email address'), blank=False, unique=True)
    is_staff = models.BooleanField(
        _('staff status'),
        default=False,
        help_text=_(
            'Designates whether the user can log into this admin site.'),
    )
    is_active = models.BooleanField(
        _('active'),
        default=True,
        help_text=_(
            'Designates whether this user should be treated as active. '
            'Unselect this instead of deleting accounts.'),
    )
    date_joined = models.DateTimeField(_('date joined'), default=timezone.now)
    email_verified = models.BooleanField(
        _('email_verified'),
        default=False,
        help_text=_('Designates whether this users email is verified. '),
    )
    objects = MyUserManager()

    EMAIL_FIELD = 'email'
    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['username']

    @property
    def token(self):
        token = jwt.encode(
            {
                'username': self.username,
                'email': self.email,
                'exp': datetime.utcnow() + timedelta(hours=24)
            },
            settings.SECRET_KEY,
            algorithm='HS256')
        return token
コード例 #3
0
 class Meta:
         model = get_user_model()
         # fiels gibt die eigenschaft an die seriasiert werden müssen
         fields = ['id', 'username', 'is_staff', 'groups']
         extra_kwargs = {
                 'username': {
                         'validators': [UnicodeUsernameValidator()],
                 }
         }
コード例 #4
0
 class Meta:
     model = CustomUser
     exclude = ('is_superuser', 'is_staff', 'is_active', 'date_joined',
                'groups', 'user_permissions', 'password')
     extra_kwargs = {
         'username': {
             'validators': [UnicodeUsernameValidator()],
         }
     }
コード例 #5
0
class UserProfile(AbstractUser):
    """
    自定义扩展用户
    """
    username_validator = UnicodeUsernameValidator()
    username = models.CharField(
        _('username'),
        max_length=20,
        unique=True,
        help_text=
        _('Required. 20 characters or fewer. Letters, digits and @/./+/-/_ only.'
          ),
        validators=[username_validator],
        error_messages={
            'unique': _("A user with that username already exists."),
        },
    )
    email = models.EmailField(blank=True,
                              null=True,
                              verbose_name="电子邮箱",
                              help_text="电子邮箱")
    avatar = models.ImageField(blank=True,
                               null=True,
                               upload_to="avatar/",
                               default="avatar/default.png",
                               verbose_name="头像",
                               help_text="头像")
    age = models.IntegerField(blank=True,
                              null=True,
                              verbose_name="年龄",
                              help_text="年龄")
    website = models.URLField(blank=True,
                              null=True,
                              verbose_name="个人网站",
                              help_text="个人网站")
    hometown = models.CharField(max_length=64,
                                blank=True,
                                null=True,
                                verbose_name="家乡",
                                help_text="家乡")
    introduction = models.CharField(max_length=128,
                                    blank=True,
                                    null=True,
                                    verbose_name="个人简介",
                                    help_text="个人简介")

    class Meta:
        verbose_name = "用户"
        verbose_name_plural = "用户"

    def get_avatar_url(self):
        if self.socialaccount_set.count():
            return self.socialaccount_set.all()[0].get_avatar_url()
        return None

    def __str__(self):
        return "用户:{0}".format(self.username)
コード例 #6
0
 class Meta:
     model = User
     fields = ('username', 'email', 'password')
     extra_kwargs = {
         'username': {
             'validators': [UnicodeUsernameValidator()],
         },
         'password': {'required': False, 'write_only': True}
     }
コード例 #7
0
ファイル: models.py プロジェクト: MeBr0/Django
class MyAbstractUser(AbstractBaseUser, PermissionsMixin):
    username_validator = UnicodeUsernameValidator()

    username = models.CharField(
        _('username'),
        max_length=30,
        unique=True,
        help_text=
        _('Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only.'
          ),
        validators=[username_validator],
        error_messages={
            'unique': _("A user with that username already exists."),
        },
    )
    first_name = models.CharField(_('first name'), max_length=30, blank=True)
    last_name = models.CharField(_('last name'), max_length=30, blank=True)
    email = models.EmailField(_('email address'), blank=True)
    is_staff = models.BooleanField(
        _('staff status'),
        default=False,
        help_text=_(
            'Designates whether the user can log into this admin site.'),
    )
    is_active = models.BooleanField(
        _('active'),
        default=True,
        help_text=_(
            'Designates whether this user should be treated as active. '
            'Unselect this instead of deleting accounts.'),
    )
    date_joined = models.DateTimeField(_('date joined'), default=timezone.now)

    objects = UserManager()

    EMAIL_FIELD = 'email'
    USERNAME_FIELD = 'username'
    REQUIRED_FIELDS = ['email']

    class Meta:
        verbose_name = _('user')
        verbose_name_plural = _('users')
        abstract = True

    def clean(self):
        super().clean()
        self.email = self.__class__.objects.normalize_email(self.email)

    def get_full_name(self):
        full_name = '%s %s' % (self.first_name, self.last_name)
        return full_name.strip()

    def get_short_name(self):
        return self.first_name

    def email_user(self, subject, message, from_email=None, **kwargs):
        send_mail(subject, message, from_email, [self.email], **kwargs)
コード例 #8
0
ファイル: serializers.py プロジェクト: wecodeafrica/backend
 class Meta:
     model = get_user_model()
     fields = ("username", "first_name", "last_name", "email", "password",
               "phone_number", "user_type")
     extra_kwargs = {
         "username": {
             "validators": [UnicodeUsernameValidator()],
         }
     }
コード例 #9
0
 class Meta:
     model = User
     fields = ('url', 'username', 'name', 'surname', 'email', 'tel',
               'address')
     extra_kwargs = {
         'username': {
             'validators': [UnicodeUsernameValidator()],
         }
     }
コード例 #10
0
ファイル: serializers.py プロジェクト: max-young/MMFlow
 class Meta:
     model = User
     fields = ('id', 'username', 'first_name', 'email')
     # https://medium.com/django-rest-framework/dealing-with-unique-constraints-in-nested-serializers-dade33b831d9
     extra_kwargs = {
         'username': {
             'validators': [UnicodeUsernameValidator()],
         }
     }
コード例 #11
0
 class Meta:
     model = User
     fields = ("name", "email", "password", "user_id", 'user')
     extra_kwargs = {
         'usercode': {
             'validators': [UnicodeUsernameValidator()],
             'read_only': True
         },
     }
コード例 #12
0
class User(AbstractBaseUser, PermissionsMixin):
    username_validator = UnicodeUsernameValidator()

    username = models.CharField(
        _('username'),
        max_length=150,
        unique=True,
        help_text=_('Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.'),
        validators=[username_validator],
        error_messages={
            'unique': _("A user with that username already exists."),
        },
    )
    name = models.CharField(_('name'), max_length=160)
    email = models.EmailField(_('email address'), blank=True)
    is_active = models.BooleanField(
        _('active'),
        default=True,
        help_text=_(
            'Designates whether this user should be treated as active. '
            'Only active users can login.'
        ),
    )
    date_joined = models.DateTimeField(_('date joined'), default=timezone.now)

    objects = UserManager()

    EMAIL_FIELD = 'email'
    USERNAME_FIELD = 'username'
    REQUIRED_FIELDS = []

    class Meta:
        verbose_name = _('user')
        verbose_name_plural = _('users')

    def __str__(self):
        return self.name + f' || {self.username}'

    @property
    def is_staff(self):
        """
        THIS IS A HACK TO PLAY NICELY WITH ADMIN. DO NOT USE.
        For library staff, use "is_library_staff" property
        """
        return bool(self.is_superuser)

    @property
    def is_library_staff(self):
        return hasattr(self, 'staff')

    def clean(self):
        super().clean()
        self.email = self.__class__.objects.normalize_email(self.email)

    def email_user(self, subject, message, from_email=None, **kwargs):
        """Send an email to this user."""
        send_mail(subject, message, from_email, [self.email], **kwargs)
コード例 #13
0
class User(AbstractBaseUser, PermissionsMixin):
    username_validator = UnicodeUsernameValidator()

    objects = UserManager()

    email = models.EmailField(max_length=255, unique=True)
    username = models.CharField(
        "username",
        max_length=16,
        blank=False,
        unique=True,
        help_text=
        ("Required. 50 characters or fewer. Letters, digits and @/./+/-/_ only."
         ),
        validators=[username_validator, username_length],
    )
    # birth_date = models.DateField(
    #     auto_now=False, null=False, blank=False, default=timezone.now()
    # )
    point = models.PositiveIntegerField(default=30)
    user_image = models.ImageField(blank=True,
                                   upload_to="accounts/userImage/%Y/%m/&d")
    follower = models.ManyToManyField("self",
                                      blank=True,
                                      related_name="following",
                                      symmetrical=False)
    comments = models.CharField(max_length=50, blank=True)
    mbti = models.ForeignKey(Mbti, null=True, on_delete=models.CASCADE)
    company = models.ForeignKey(Company, null=True, on_delete=models.CASCADE)

    is_mento = models.BooleanField(default=True)
    is_active = models.BooleanField(default=True)
    is_admin = models.BooleanField(default=False)
    is_superuser = models.BooleanField(default=False)
    is_staff = models.BooleanField(default=False)

    date_joined = models.DateTimeField(auto_now_add=True)

    EMAIL_FIELD = "email"
    USERNAME_FIELD = "username"
    REQUIRED_FIELDS = [
        "email",
    ]

    @property
    def age(self):
        today = date.today()
        try:
            birthday = self.birth_date.replace(year=today.year)
        except ValueError:
            birthday = self.birth_date.replace(year=today.year,
                                               month=self.birth_date.month + 1,
                                               day=1)
        if birthday > today:
            return today.year - self.birth_date.year - 1
        else:
            return today.year - self.birth_date.year
コード例 #14
0
 class Meta:
     model = UserStatistics
     fields = ('user', 'net_gain', 'NBA_profile', 'Madden_profile',
               'FIFA_profile', 'NHL_profile')
     extra_kwargs = {
         'user': {
             'validators': [UnicodeUsernameValidator()],
         }
     }
コード例 #15
0
    class Meta:
        model = User
        fields = ['otp', 'password', 'confirm_password']
        extra_kwargs = {
            'email': {
                'validators': [UnicodeUsernameValidator()],
            },

        }
コード例 #16
0
ファイル: serializers.py プロジェクト: agomezb/servicesmockup
 class Meta:
     model = Persona
     fields = ('id', 'identificacion', 'nombre', 'correo', 'direccion',
               'telefono', 'extranjero')
     extra_kwargs = {
         'identificacion': {
             'validators': [UnicodeUsernameValidator()],
         }
     }
コード例 #17
0
ファイル: serializers.py プロジェクト: b0gdanp3trovic/cookupz
    class Meta:
        model = User
        fields = ['email', 'first_name', 'last_name', 'username']

        extra_kwargs = {
            'username': {
                'validators': [UnicodeUsernameValidator()],
            }
        }
コード例 #18
0
ファイル: models.py プロジェクト: kubahaha/QuizUczelniany
class User(AbstractBaseUser):
    """
    Extends AbstractBaseUser, inherits password field and set of useful methods
    Added some fields and methods based on builtin django user (AbstractUser) class
    At the end contains: ID(default if no pk specified), username, email, password, date_joined, last_login
    """
    username_validator = UnicodeUsernameValidator(
    ) if six.PY3 else ASCIIUsernameValidator()

    username = models.CharField(
        _('username'),
        max_length=150,
        unique=True,
        help_text=
        _('Maksymalna długość 150 znaków. Dozwolone są litery, cyfry i @/./+/-/_.'
          ),
        validators=[username_validator],
        error_messages={
            'unique': _("Użytkownik o takiej nazwie już istnieje"),
            'invalid': _("Podaj poprawną nazwę użytkownika"
                         ),  # Override username_validator error
        },
    )

    email = models.EmailField(
        _('email address'),
        unique=True,
        error_messages={
            'unique': _("Użytkownik o takim emailu już istnieje"),
        },
    )

    date_joined = models.DateTimeField(_('date joined'), default=timezone.now)

    objects = UserManager()

    EMAIL_FIELD = 'email'
    USERNAME_FIELD = 'username'

    REQUIRED_FIELDS = ['password', 'email']

    def clean(self):
        super(User, self).clean()  # call base method - clearing username

    def get_full_name(self):
        """
        Base method force to override this method
        Just return username
        """
        return self.username

    def get_short_name(self):
        """
        Base method force to override this method
        Just return username
        """
        return self.username
コード例 #19
0
 class Meta:
     model = User
     fields = ('id', 'username', 'email', 'first_name', 'last_name')
     read_only_fields = ('id', )
     extra_kwargs = {
         'username': {
             'validators': [UnicodeUsernameValidator()],
         }
     }
コード例 #20
0
ファイル: models.py プロジェクト: baykay/presscontent
class User(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(
        verbose_name=_('email address'), max_length=255, unique=True
    )
    username = models.CharField(
        _('username'), max_length=30, unique=True,
        validators=[UnicodeUsernameValidator()]
    )
    first_name = models.CharField(_('first name'), max_length=30, blank=True)
    last_name = models.CharField(_('last name'), max_length=150, blank=True)

    is_active = models.BooleanField(
        _('active'),
        default=True,
        help_text=_(
            'Designates whether this user should be treated as active. '
            'Unselect this instead of deleting accounts.'
        ),
    )
    is_staff = models.BooleanField(
        _('staff status'),
        default=False,
        help_text=_(
            'Designates whether the user can log into this admin site.'
        ),
    )
    # is_superuser field provided by PermissionsMixin
    # groups field provided by PermissionsMixin
    # user_permissions field provided by PermissionsMixin

    date_joined = models.DateTimeField(
        _('date joined'), default=timezone.now
    )

    objects = UserManager()

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['username', 'first_name', 'last_name']

    def get_full_name(self):
        full_name = '%s %s' % (self.first_name, self.last_name)
        return full_name.strip()

    def get_short_name(self):
        return self.first_name.strip()

    def get_initial(self):
        return '{}{}'.format(self.first_name[0], self.last_name[0]).upper()

    def __str__(self):
        return '{} - {}'.format(self.username, self.email)

    def has_perm(self, perm, obj=None):
        return True

    def has_module_perms(self, app_label):
        return True
コード例 #21
0
class App(AbstractBaseUser):
    userNameValidator = UnicodeUsernameValidator()
    username = models.CharField(
        _('username'),
        max_length=150,
        unique=True,
        help_text=
        _('Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.'
          ),
        validators=[userNameValidator],
        error_messages={
            'unique': _("A user with that username already exists."),
        },
    )
    first_name = models.CharField(_('first name'), max_length=30, blank=True)
    last_name = models.CharField(_('last name'), max_length=150, blank=True)
    email = models.EmailField(_('email address'), blank=True)
    is_staff = models.BooleanField(
        _('staff status'),
        default=False,
        help_text=_(
            'Designates whether the user can log into this admin site.'),
    )
    is_active = models.BooleanField(
        _('active'),
        default=True,
        help_text=_(
            'Designates whether this user should be treated as active. '
            'Unselect this instead of deleting accounts.'),
    )
    is_superuser = models.BooleanField(
        _('superuser status'),
        default=False,
        help_text=_('Designates that this user has all permissions without '
                    'explicitly assigning them.'),
    )

    date_joined = models.DateTimeField(_('date joined'), default=timezone.now)

    EMAIL_FIELD = 'email'
    USERNAME_FIELD = 'username'
    REQUIRED_FIELDS = ['email']
    objects = UserManager()

    # objects = MyBaseUserManager()

    def create_token(self):
        headers = {"typ": "JWT", "alg": "HS256", "user_id": self.username}

        playload = {
            "headers": headers,
            "iss": 'myapi',
            "exp": time.time() + EXPIRE_MINUTES,
            'iat': time.time()
        }
        signature = jwt.encode(playload, SECRET_KEY, algorithm='HS256')
        return signature, playload['exp']
コード例 #22
0
ファイル: validators.py プロジェクト: aleffert/journaltown-be
 def __init__(self):
     self.validators = [
         validators.CaseInsensitiveUnique(
             get_user_model(), 'username',
             'Invalid username: Already taken'),
         validators.ReservedNameValidator(),
         validators.validate_confusables,
         UnicodeUsernameValidator()
     ]
コード例 #23
0
ファイル: serializers.py プロジェクト: arodrica43/agmodule
 class Meta:
     model = User
     fields = ['url', 'id','username','email', 'groups']
     read_only_fields = ('groups',)
     extra_kwargs = {
         'username': {
             'validators': [UnicodeUsernameValidator()]
         }   
     }
コード例 #24
0
 class Meta:
     model = User
     fields = ('id', 'username', 'is_active', 'first_name',
               'last_name', 'email', 'auth_token')
     extra_kwargs = {
         'username': {
             'validators': [UnicodeUsernameValidator()]
         }
     }
コード例 #25
0
ファイル: serializers.py プロジェクト: bgrego11/allergyApi
    class Meta:
        model = User
        fields = ['id','url', 'username', 'email', 'groups']

        extra_kwargs = {
            'username': {
                'validators': [UnicodeUsernameValidator()],
            }
        }
コード例 #26
0
class User(AbstractBaseUser):
    username_validator = UnicodeUsernameValidator()
    USERNAME_FIELD = 'username'

    username = models.CharField(
        _('username'),
        max_length=150,
        unique=True,
        help_text=_('Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.'),
        validators=[username_validator],
        error_messages={
            'unique': _("A user with that username already exists."),
        },
    )
    is_active = models.BooleanField(
        _('active'),
        default=True,
        help_text=_(
            'Designates whether this user should be treated as active. '
            'Unselect this instead of deleting accounts.'
        ),
    )
    date_joined = models.DateTimeField(_('date joined'), default=timezone.now)
    first_name = models.CharField(_('first name'), max_length=30, blank=True)
    last_name = models.CharField(_('last name'), max_length=150, blank=True)
    email = models.EmailField(_('email address'), blank=True)
    avatar = models.ImageField(_('avater'), upload_to=user_avatar_path, blank=True, null=True)
    organization = models.ForeignKey(
        'Organization',
        verbose_name=_('organization'),
        on_delete=models.SET_NULL,
        null=True,
        related_name='organization_users',
        blank=True
    )
    sex = models.CharField(_('sex'), max_length=10, choices=[('M', '男'), ('F', '女')], blank=True)

    def get_full_name(self):
        """
        Return the first_name plus the last_name, with a space in between.
        """
        full_name = '%s %s' % (self.last_name, self.first_name)
        return full_name.strip()

    def authenticate(self, password):
        return self.check_password(password)

    # def delete(self):
    #     self.is_active = False
    #     self.save(update_fields=['is_active'])

    class Meta:
        ordering = ['username']

    def __str__(self):
        name = '%s(%s)' % (self.username, self.get_full_name())
        return name.strip()
コード例 #27
0
ファイル: models.py プロジェクト: supertypeai/buntureviews
class UserAbstract(AbstractBaseUser, PermissionsMixin):
    username_validator = UnicodeUsernameValidator()

    first_name = models.CharField(_('first name'), max_length=150, blank=True)
    last_name = models.CharField(_('last name'), max_length=150, blank=True)
    username = models.CharField(
        _('username'),
        max_length=150,
        unique=True,
        help_text=
        _('Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.'
          ),
        validators=[username_validator],
        error_messages={
            'unique': _("A user with that username already exists."),
        },
    )
    email = models.EmailField(_('email address'), unique=True, blank=True)
    is_staff = models.BooleanField(
        _('staff status'),
        default=False,
        help_text=_(
            'Designates whether the user can log into this admin site.'),
    )
    date_joined = models.DateTimeField(_('date joined'), default=timezone.now)
    is_active = models.BooleanField(
        _('active'),
        default=True,
        help_text=_(
            'Designates whether this user should be treated as active. '
            'Unselect this instead of deleting accounts.'),
    )

    objects = BaseManager()

    EMAIL_FIELD = 'email'
    USERNAME_FIELD = 'username'
    REQUIRED_FIELDS = ['email']

    class Meta:
        abstract = True

    def clean(self):
        super().clean()
        self.email = self.__class__.objects.normalize_email(self.email)

    def get_full_name(self):
        """
        Return the first_name plus the last_name, with a space in between.
        """
        full_name = '%s %s' % (self.first_name, self.last_name)
        return full_name.strip()

    def get_short_name(self):
        """Return the short name for the user."""
        return self.first_name
コード例 #28
0
class User(AbstractBaseUser):
    username_validator = UnicodeUsernameValidator()

    name = models.CharField(
        verbose_name='username',
        max_length=255,
        validators=[username_validator],
        unique=True,
    )
    email = models.EmailField(
        verbose_name='email address',
        max_length=255,
    )
    active = models.BooleanField(default=True)
    staff = models.BooleanField(default=False)
    stake_holder = models.BooleanField(default=False)
    admin = models.BooleanField(default=False)

    USERNAME_FIELD = 'name'
    EMAIL_FIELD = 'email'
    REQUIRED_FIELDS = ['email']

    objects = UserManager()

    def get_full_name(self):
        return self.name

    def get_short_name(self):
        return self.name

    def __str__(self):
        return self.name

    def has_perm(self, perm, obj=None):
        "Does the user have a specific permission?"
        return True

    def has_module_perms(self, app_label):
        "Does the user have permissions to view the app `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

    @property
    def is_stake_holder(self):
        return self.stake_holder
コード例 #29
0
class User(AbstractBaseUser, PermissionsMixin):
    username = models.CharField(max_length=20,
                                help_text='请输入20个以下的数字或字母组成的用户名',
                                validators=[UnicodeUsernameValidator()],
                                unique=True,
                                verbose_name='用户名')
    TYPE_CHOICE = ((0, '管理员'), (1, '学生'), (2, '团学组织'), (3, '社团'))
    type = models.PositiveSmallIntegerField(choices=TYPE_CHOICE,
                                            default=1,
                                            verbose_name='用户类型')
    name = models.CharField(max_length=50, verbose_name='名称')
    CAMPUS_CHOICE = (
        (0, '跨校区'),
        (1, '八里台'),
        (2, '津南'),
        (3, '泰达'),
    )
    campus = models.PositiveSmallIntegerField(choices=CAMPUS_CHOICE,
                                              default=0,
                                              verbose_name='校区')
    college = models.ForeignKey(to=College,
                                blank=True,
                                null=True,
                                on_delete=models.SET_NULL,
                                verbose_name='学院')
    description = models.TextField(max_length=200,
                                   blank=True,
                                   null=True,
                                   verbose_name='描述')
    organizations = models.ManyToManyField(
        to='self',
        blank=True,
        related_name='members',
        symmetrical=False,
        help_text='可添加多个;组织关系不递归,间接上级组织需另外添加。',
        verbose_name='上级组织',
    )
    is_active = models.BooleanField(default=True, verbose_name='是否启用')
    is_staff = models.BooleanField(default=True, verbose_name='是否允许登录')

    ADMIN = 0
    STUDENT = 1
    ORGANIZATION = 2
    CLUB = 3

    USERNAME_FIELD = 'username'
    REQUIRED_FIELDS = ['name']

    objects = UserManager()

    class Meta:
        verbose_name = '用户'
        verbose_name_plural = verbose_name

    def __str__(self):
        return str(self.name) + '(' + str(self.get_type_display()) + ')'
コード例 #30
0
class User(AbstractBaseUser, PermissionsMixin):
    """
    An abstract base class implementing a fully featured User model with
    admin-compliant permissions.
    Username and password are required. Other fields are optional.
    """
    username_validator = UnicodeUsernameValidator()

    username = models.CharField(
        _('username'),
        max_length=150,
        unique=True,
        help_text=
        _('Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.'
          ),
        validators=[username_validator],
        error_messages={
            'unique': _("A user with that username already exists."),
        },
    )
    first_name = models.CharField(_('first name'), max_length=30, blank=True)
    last_name = models.CharField(_('last name'), max_length=150, blank=True)
    email = models.EmailField(_('email address'), blank=True)
    is_staff = models.BooleanField(
        _('staff status'),
        default=False,
        help_text=_(
            'Designates whether the user can log into this admin site.'),
    )
    is_active = models.BooleanField(
        _('active'),
        default=True,
        help_text=_(
            'Designates whether this user should be treated as active. '
            'Unselect this instead of deleting accounts.'),
    )
    date_joined = models.DateTimeField(_('date joined'), default=timezone.now)

    objects = UserManager()

    EMAIL_FIELD = 'email'
    USERNAME_FIELD = 'username'
    REQUIRED_FIELDS = ['email']

    class Meta:
        verbose_name = _('user')
        verbose_name_plural = _('users')
        #abstract = True # ここを削除しないといけないことを忘れない!!!!!!!!!!

    def clean(self):
        super().clean()
        self.email = self.__class__.objects.normalize_email(self.email)

    def email_user(self, subject, message, from_email=None, **kwargs):
        """Send an email to this user."""
        send_mail(subject, message, from_email, [self.email], **kwargs)