码迷,mamicode.com
首页 > 其他好文 > 详细

序列化

时间:2020-10-13 17:21:12      阅读:25      评论:0      收藏:0      [点我收藏+]

标签:values   更新   eth   查找   serial   related   models   roo   users   


序列化正向查找

from rest_framework import serializers from users.models import UserInfo

class UserInfoSerializer(serializers.Serializer):
    name = serializers.CharField(min_length=3,max_length=20)               # 显示普通字段
    ut = serializers.CharField(source=ut.type_name,required=False)       # 显示一对多字段名称
    gp = serializers.SerializerMethodField(read_only=True)                 # 自定义显示(显示多对多)
    xxx = serializers.CharField(source=name,required=False)              # 也可以自定义显示字段名称
    ut_id = serializers.IntegerField(write_only=True)                      # 一对多关联字段定义(外键约束)

    ‘‘‘PrimaryKeyRelatedField和StringRelatedField:可以用对 一对多 和 多对多 关联对象序列化‘‘‘
    # gp = serializers.PrimaryKeyRelatedField(read_only=True, many=True)
    # gp = serializers.StringRelatedField(read_only=True,many=True)

    class Meta:
        model = UserInfo

    # 自定义显示 多对多 字段
    def get_gp(self,row):
        ‘‘‘row: 传过来的正是 UserInfo表的对象‘‘‘
        gp_obj_list = row.gp.all().values(id,group)  # 获取用户所有组
        return gp_obj_list

 


序列化 反向查找
‘‘‘ 一对多序列化(反向查找)‘‘‘
class UserTypeSerializer(serializers.Serializer):
    type_name = serializers.CharField()
    # 法1一对多关联对象序列化:此字段将被序列化为关联对象的主键
    userinfo_set = serializers.PrimaryKeyRelatedField(read_only=True, many=True)

    # 法2一对多关联对象序列化:此字段将被序列化为关联对象的字符串表示方式(即__str__方法的返回值)
    # userinfo_set = serializers.StringRelatedField(read_only=True,many=True)
    # 法3一对多关联对象序列化:使用关联对象的序列化器
    # userinfo_set = UserInfoSerializer(many=True)

 


反序列
  使用反序列化保存数据
‘‘‘创建用户‘‘‘
def post(self,request):
    ser = serializers.UserInfoSerializer(data=request.data)
    if ser.is_valid():
        ser.save()
        return Response(data=ser.data, status=201)
    return Response(data=ser.errors,status=400)

 2)反序列化定义创建和更新方法






 # 定义创建语法
    def create(self, validated_data):
        return UserInfo.objects.create(**validated_data)

    # 定义更新方法
    def update(self, instance, validated_data):
        if validated_data.get(name):
            instance.name = validated_data[name]
        if validated_data.get(ut_id):
            instance.ut_id = validated_data[ut_id]
        instance.save()
        return instance

    # 定义单一字段验证的方法
    def validate_name(self, value):
        if value == root:
            raise serializers.ValidationError(不能创建root管理员账号)
        return value

    # 定义多字段验证方法
    def validate(self, attrs):
        if attrs[name] == admin:
            raise serializers.ValidationError(不能创建admi

 







序列化

标签:values   更新   eth   查找   serial   related   models   roo   users   

原文地址:https://www.cnblogs.com/xiaoxiamiaichiyu/p/13805766.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!