restframework 序列化和反序列化

177 阅读1分钟

序列化和反序列化

反序列化:json数据转换为模型对象
序列化:模型对象转换为json数据

create:
    s = DiabetesModelSerializer(data=data)
    s.save()
    
get:
    diabetes = Diabetes.objects.filter(user=1, is_active=True)
     # 如果查询集有多条,设置many=True
    serializer = DiabetesModelSerializer(diabetes, many=True)
    return response_success("查询成功", serializer.data)
        
update:
    diabetes = Diabetes.objects.get(user=1, is_active=True)
    #instance要更新的对象,partial默认false(需包含所有字段),设置为true表示局部修改
    s = DiabetesModelSerializer(instance=diabetes, data=request.data, partial=False)   
    s.save()

delete:
    #采用逻辑删除,非物理删除,若queryset为单一,则删除一条,否则批量删除
    Diabetes.objects.filter(user=1, is_active=True).update(is_active=False)

序列化类

from rest_framework import serializers
from rest_framework.fields import DateTimeField

from diabetes.models import Diabetes


class DiabetesModelSerializer(serializers.ModelSerializer):

    create_time = DateTimeField(format="%Y-%m-%d %H:%M:%S", required=False, read_only=True)
    class Meta:
        model = Diabetes
        fields = "__all__"

视图

class DiabetesViewSet(ModelViewSet):

    queryset = Diabetes.objects.all()
    serializer_class = DiabetesModelSerializer

    @action(methods=['GET'], detail=False)
    def fetch_diabetes_data(self, request):

        try:
            user = fetch_user(request).id
            diabetes = Diabetes.objects.filter(user=user, is_active=True).order_by('-update_time')
            serializer = DiabetesModelSerializer(diabetes, many=True)
            return HttpResponse.response_success("查询成功", serializer.data)
        except Exception as e:
            logger.error(traceback.format_exc(limit=3))
            return HttpResponse.response_failed("查询失败")