回退了更多阶段的修改
This commit is contained in:
103
users/models.py
103
users/models.py
@@ -1,51 +1,72 @@
|
||||
# models.py
|
||||
from django.db import models
|
||||
from django.contrib.auth.models import AbstractBaseUser
|
||||
from gvsdsdk.model_base import QModel
|
||||
|
||||
|
||||
# ==================== 用户敏感数据表(独立于 gvsdsdk.User) ====================
|
||||
class UserSensitiveData(QModel):
|
||||
"""用户敏感数据表——存储 OpenID、支付信息等敏感数据
|
||||
# ==================== 用户主表 ====================
|
||||
class UserMain(AbstractBaseUser, QModel):
|
||||
# ID字段
|
||||
id = models.AutoField(primary_key=True, verbose_name='主键ID')
|
||||
yonghuid = models.CharField(max_length=7, unique=True, db_index=True, verbose_name='用户ID')
|
||||
|
||||
与 gvsdsdk.User 一对一关联,不继承 User 表。
|
||||
所有敏感字段仅在此表中存储,实现数据隔离。
|
||||
"""
|
||||
UserUUID = models.OneToOneField(
|
||||
'gvsdsdk.User',
|
||||
on_delete=models.CASCADE,
|
||||
db_column='UserUUID',
|
||||
related_name='sensitive_data',
|
||||
verbose_name='关联用户UUID'
|
||||
# 微信相关字段
|
||||
openid = models.CharField(max_length=64, unique=True, db_index=True, verbose_name='微信OpenID')
|
||||
unionid = models.CharField(max_length=64, null=True, blank=True, db_index=True, verbose_name='微信UnionID')
|
||||
|
||||
# 基础信息字段
|
||||
#tupian_url = models.CharField(max_length=500, null=True, blank=True, verbose_name='商品图片URL') # 用CharField
|
||||
avatar = models.CharField(max_length=500, null=True, blank=True,default='a_long/morentouxiang.jpg', verbose_name='头像') # 用CharField
|
||||
phone = models.CharField(max_length=11, blank=True, null=True, verbose_name='手机号')
|
||||
shoujihao_renzheng = models.BooleanField(default=False, verbose_name='手机号是否已认证')
|
||||
password = models.CharField(max_length=200, null=True, blank=True, verbose_name='密码')
|
||||
zhifu = models.CharField(max_length=500, null=True, blank=True, verbose_name='收款码图片') # 用CharField
|
||||
skzhanghao = models.CharField(max_length=11, blank=True, null=True, verbose_name='收款账号')
|
||||
ip = models.CharField(max_length=50, blank=True, null=True, verbose_name='来访用户ip')
|
||||
last_login_time = models.DateTimeField(null=True, blank=True, verbose_name='最后登录时间')
|
||||
|
||||
|
||||
# 用户类型字段
|
||||
user_type = models.CharField(
|
||||
max_length=10,
|
||||
choices=[
|
||||
('normal', '普通用户'),
|
||||
('dashou', '打手'),
|
||||
('shop', '商家'),
|
||||
('guanshi', '管事'),
|
||||
('admin', '管理员')
|
||||
],
|
||||
default='normal',
|
||||
verbose_name='用户类型'
|
||||
)
|
||||
# 微信相关
|
||||
OpenID = models.CharField(max_length=64, unique=True, null=True, blank=True, db_index=True, verbose_name='微信OpenID')
|
||||
UnionID = models.CharField(max_length=64, null=True, blank=True, db_index=True, verbose_name='微信UnionID')
|
||||
|
||||
# 认证相关
|
||||
Password = models.CharField(max_length=200, null=True, blank=True, verbose_name='本地密码')
|
||||
PhoneVerified = models.BooleanField(default=False, verbose_name='手机号是否已认证')
|
||||
|
||||
# 支付相关
|
||||
Zhifu = models.CharField(max_length=500, null=True, blank=True, verbose_name='收款码图片')
|
||||
SKZhanghao = models.CharField(max_length=11, blank=True, null=True, verbose_name='收款账号')
|
||||
|
||||
# 安全相关
|
||||
IP = models.CharField(max_length=50, blank=True, null=True, verbose_name='来访用户IP')
|
||||
|
||||
# 状态和时间字段
|
||||
#is_active = models.BooleanField(default=True, verbose_name='是否激活')
|
||||
#last_login = models.DateTimeField(blank=True, null=True, verbose_name='最后登录时间')
|
||||
create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
|
||||
update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间')
|
||||
|
||||
# 邀请码字段
|
||||
#yaoqingma = models.CharField(max_length=20, blank=True, null=True, verbose_name='邀请码')
|
||||
|
||||
# 只需要添加这3行
|
||||
USERNAME_FIELD = 'openid' # 用openid作为用户名
|
||||
REQUIRED_FIELDS = ['yonghuid'] # 必填字段
|
||||
|
||||
class Meta:
|
||||
db_table = 'user_sensitive_data'
|
||||
verbose_name = '用户敏感数据'
|
||||
db_table = 'user_main'
|
||||
verbose_name = '用户主表'
|
||||
verbose_name_plural = verbose_name
|
||||
indexes = [
|
||||
models.Index(fields=['OpenID']),
|
||||
models.Index(fields=['UnionID']),
|
||||
models.Index(fields=['yonghuid']),
|
||||
models.Index(fields=['openid']),
|
||||
#models.Index(fields=['phone']),
|
||||
models.Index(fields=['user_type']),
|
||||
#models.Index(fields=['create_time']),
|
||||
]
|
||||
|
||||
def __str__(self):
|
||||
return f'敏感数据-{self.UserUUID}'
|
||||
return f'{self.yonghuid}'
|
||||
|
||||
|
||||
|
||||
@@ -69,7 +90,7 @@ class OfficialAccountUser(QModel):
|
||||
|
||||
# ==================== 老板扩展表 ====================
|
||||
class UserBoss(QModel):
|
||||
user = models.OneToOneField('gvsdsdk.User', on_delete=models.CASCADE, related_name='boss_profile',
|
||||
user = models.OneToOneField(UserMain, on_delete=models.CASCADE, related_name='boss_profile',
|
||||
verbose_name='关联用户')
|
||||
nickname = models.CharField(max_length=50, verbose_name='老板昵称')
|
||||
zonge = models.DecimalField(max_digits=12, decimal_places=2, default=0.00, verbose_name='消费总额')
|
||||
@@ -86,7 +107,7 @@ class UserBoss(QModel):
|
||||
|
||||
# ==================== 打手扩展表 ====================
|
||||
class UserDashou(QModel):
|
||||
user = models.OneToOneField('gvsdsdk.User', on_delete=models.CASCADE, related_name='dashou_profile',
|
||||
user = models.OneToOneField(UserMain, on_delete=models.CASCADE, related_name='dashou_profile',
|
||||
verbose_name='关联用户')
|
||||
nicheng = models.CharField(max_length=50, null=True, verbose_name='打手昵称')
|
||||
chenghao = models.CharField(max_length=50, null=True,verbose_name='打手称号')
|
||||
@@ -130,7 +151,7 @@ class UserDashou(QModel):
|
||||
|
||||
# ==================== 商家扩展表 ====================
|
||||
class UserShangjia(QModel):
|
||||
user = models.OneToOneField('gvsdsdk.User', on_delete=models.CASCADE, related_name='shop_profile',
|
||||
user = models.OneToOneField(UserMain, on_delete=models.CASCADE, related_name='shop_profile',
|
||||
verbose_name='关联用户')
|
||||
nicheng = models.CharField(max_length=50, unique=True, db_index=True, verbose_name='商家昵称')
|
||||
zhuangtai = models.IntegerField(choices=[(0, '待审核'), (1, '正常'), (2, '禁用')], default=1,
|
||||
@@ -159,7 +180,7 @@ class UserShangjia(QModel):
|
||||
|
||||
# ==================== 管事扩展表 ====================
|
||||
class UserGuanshi(QModel):
|
||||
user = models.OneToOneField('gvsdsdk.User', on_delete=models.CASCADE, related_name='guanshi_profile',
|
||||
user = models.OneToOneField(UserMain, on_delete=models.CASCADE, related_name='guanshi_profile',
|
||||
verbose_name='关联用户')
|
||||
yaoqingren = models.CharField(max_length=7,null=True, db_index=True, verbose_name='邀请人ID')
|
||||
yaoqingma = models.CharField(max_length=20,null=True,db_index=True, verbose_name='邀请码')
|
||||
@@ -255,7 +276,7 @@ class UserZuzhang(QModel):
|
||||
|
||||
class UserShenheguan(QModel):
|
||||
"""审核官扩展表(与UserMain一对一关联)"""
|
||||
user = models.OneToOneField('gvsdsdk.User', on_delete=models.CASCADE, related_name='shenheguan_profile', verbose_name='关联用户', db_index=True)
|
||||
user = models.OneToOneField(UserMain, on_delete=models.CASCADE, related_name='shenheguan_profile', verbose_name='关联用户', db_index=True)
|
||||
zhuangtai = models.IntegerField(choices=[(0, '禁用'), (1, '正常')], default=1, verbose_name='账号状态')
|
||||
shenhe_zhuangtai = models.IntegerField(choices=[(0, '空闲'), (1, '审核中')], default=0, verbose_name='审核官状态')
|
||||
is_renzheng = models.BooleanField(default=False, verbose_name='是否认证')
|
||||
@@ -275,7 +296,7 @@ class UserShenheguan(QModel):
|
||||
|
||||
# ==================== 管理员扩展表 ====================
|
||||
class AdminProfile(QModel):
|
||||
user = models.OneToOneField('gvsdsdk.User', on_delete=models.CASCADE, related_name='admin_profile',
|
||||
user = models.OneToOneField(UserMain, on_delete=models.CASCADE, related_name='admin_profile',
|
||||
verbose_name='关联用户')
|
||||
password = models.CharField(max_length=255, verbose_name='密码')
|
||||
wechat = models.CharField(max_length=50, blank=True, verbose_name='管理员微信')
|
||||
@@ -290,7 +311,7 @@ class AdminProfile(QModel):
|
||||
|
||||
|
||||
class UserKefu(QModel):
|
||||
user = models.OneToOneField('gvsdsdk.User', on_delete=models.CASCADE, related_name='kefu_profile', verbose_name='关联用户')
|
||||
user = models.OneToOneField(UserMain, on_delete=models.CASCADE, related_name='kefu_profile', verbose_name='关联用户')
|
||||
nicheng = models.CharField(max_length=50, verbose_name='客服昵称')
|
||||
erjimima = models.CharField(max_length=128, verbose_name='二级密码')
|
||||
zhuangtai = models.IntegerField(choices=[(0, '禁用'), (1, '正常')], default=1, verbose_name='客服状态')
|
||||
@@ -577,9 +598,3 @@ class RankingRecord(QModel):
|
||||
return f"{self.tongji_date} {zhouqi_str}榜 {shenfen_map.get(self.shenfen)} 第{self.paiming}名"
|
||||
|
||||
|
||||
# ==================== 兼容层 ====================
|
||||
# UserMain 已废弃,所有用户数据迁移到 gvsdsdk.User
|
||||
# 此别名保持现有代码 from users.models import UserMain 可用
|
||||
from gvsdsdk.models import User as UserMain
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user