77 lines
2.8 KiB
Python
77 lines
2.8 KiB
Python
from django.db import models
|
|
from django.conf import settings
|
|
from django.contrib.auth.models import AbstractUser, Group, Permission
|
|
from django.db.models import UniqueConstraint, Q
|
|
from rest_framework.authtoken.models import Token as DefaultToken
|
|
|
|
|
|
class ParadiseUser(AbstractUser):
|
|
"""
|
|
自定义用户模型
|
|
"""
|
|
phone_number = models.CharField('手机号', max_length=20, unique=True, null=True, blank=True)
|
|
email = models.EmailField('邮箱', unique=True, null=True, blank=True)
|
|
|
|
# 新增用户信息字段
|
|
GENDER_CHOICES = (
|
|
('M', '男'),
|
|
('F', '女'),
|
|
('O', '其他'),
|
|
)
|
|
|
|
MBTI_CHOICES = (
|
|
('INTJ', 'INTJ'), ('INTP', 'INTP'), ('ENTJ', 'ENTJ'), ('ENTP', 'ENTP'),
|
|
('INFJ', 'INFJ'), ('INFP', 'INFP'), ('ENFJ', 'ENFJ'), ('ENFP', 'ENFP'),
|
|
('ISTJ', 'ISTJ'), ('ISFJ', 'ISFJ'), ('ESTJ', 'ESTJ'), ('ESFJ', 'ESFJ'),
|
|
('ISTP', 'ISTP'), ('ISFP', 'ISFP'), ('ESTP', 'ESTP'), ('ESFP', 'ESFP'),
|
|
)
|
|
|
|
favorability = models.IntegerField('好感度', default=0)
|
|
gender = models.CharField('性别', max_length=1, choices=GENDER_CHOICES, null=True, blank=True)
|
|
resident_city = models.CharField('常驻城市', max_length=50, null=True, blank=True)
|
|
birthday = models.DateField('生日', null=True, blank=True)
|
|
zodiac_sign = models.CharField('星座', max_length=20, null=True, blank=True)
|
|
mbti = models.CharField('MBTI性格', max_length=4, choices=MBTI_CHOICES, null=True, blank=True)
|
|
interests = models.TextField('兴趣爱好', null=True, blank=True)
|
|
social_identity = models.CharField('社会身份', max_length=50, null=True, blank=True)
|
|
|
|
groups = models.ManyToManyField(
|
|
Group,
|
|
related_name="paradiseuser_set",
|
|
blank=True,
|
|
help_text="The groups this user belongs to. A user will get all permissions granted to each of their groups.",
|
|
related_query_name="user",
|
|
)
|
|
user_permissions = models.ManyToManyField(
|
|
Permission,
|
|
related_name="paradiseuser_set",
|
|
blank=True,
|
|
help_text="Specific permissions for this user.",
|
|
related_query_name="user",
|
|
)
|
|
|
|
class Meta:
|
|
verbose_name = '用户'
|
|
verbose_name_plural = '用户'
|
|
ordering = ['-date_joined']
|
|
indexes = [
|
|
models.Index(fields=['username']), # 添加用户名索引
|
|
]
|
|
constraints = [
|
|
UniqueConstraint(
|
|
fields=["phone_number"],
|
|
condition=Q(phone_number__isnull=False),
|
|
name="unique_phone_number",
|
|
)
|
|
]
|
|
|
|
def __str__(self):
|
|
return self.username or self.phone_number or self.email
|
|
|
|
# class UserToken(DefaultToken):
|
|
# user = models.OneToOneField(
|
|
# settings.AUTH_USER_MODEL,
|
|
# related_name='auth_token',
|
|
# on_delete=models.CASCADE
|
|
# )
|