#Django前后端分离序列化器使用
##用户与用户身份模型
class UserIdenty(models.Model):
name = models.CharField(max_length=32)
class Meta:
db_table = 'tb_useridenty'
managed = False
def __str__(self):
return self.name
class User(models.Model):
wechat_nickname = models.CharField(max_length=64,null=True,blank=True)
wechat_openid = models.CharField(max_length=64, unique=True)
wechat_headimgurl = models.CharField(max_length=254,null=True,blank=True)
user_status = models.BooleanField(default=True)
user_identy = models.ForeignKey(UserIdenty, on_delete=models.SET_DEFAULT, default=1)
# 注册时间 设置格式
create_time = models.DateTimeField(auto_now_add=True)
# 最后一次登录时间
last_login_time = models.DateTimeField(auto_now=True)
class Meta:
db_table = 'tb_user'
managed = False
def __str__(self):
return self.wechat_nickname
##用户模型序列化
class UserSerializer(CustomModelSerializer):
create_time = serializers.DateTimeField(format='%Y-%m-%d',required=False)
last_login_time = serializers.DateTimeField(format='%Y-%m-%d',required=False)
user_identy = serializers.CharField(max_length=20,required=False)
class Meta:
model = User
fields = [
'id',
'wechat_nickname',
'wechat_headimgurl',
'wechat_openid',
'user_identy',
'user_status',
'create_time',
'last_login_time',
]
extra_kwargs = {
'id':{"read_only":True},
"create_time":{"read_only":True},
"last_login_time":{"read_only":True},
'wechat_openid':{"required":False},
"user_identy":{"required":False}
}
def validate_user_identy(self, value):
try:
user_identy = UserIdenty.objects.filter(name=value).first() or UserIdenty.objects.filter(id=value).first()
except Exception as e:
raise serializers.ValidationError("身份类型不存在")
if not user_identy:
raise serializers.ValidationError("身份类型不存在")
return user_identy
def deal_user_identy(self,instance):
# print(f"instance:",instance.user_identy)
return instance.user_identy.name
class UserIdentySerializer(CustomModelSerializer):
class Meta:
model = UserIdenty
fields = [
'id',
'name',
]
extra_kwargs = {
'id':{"read_only":True},
}
validate_user_identy用于对输入数据返回一个可以绑定user_identy要处理返回的id或则name(反序列化
deal_user_identy用于获取用户绑定身份的名称(序列化