lty/qy_lty/userapp/models.py
2026-03-17 13:17:02 +08:00

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
# )