drf 序列化 简单使用

models

class Depart(models.Model):
    name = models.CharField(verbose_name='部门名', max_length=32)

class UserInfo(models.Model):
    username = models.CharField(verbose_name='用户名', max_length=32)
    password = models.CharField(verbose_name='密码', max_length=32)
    token = models.CharField(verbose_name='token', max_length=64, null=True, blank=True)
    role = models.SmallIntegerField(verbose_name='角色', choices=((1, '经理'), (2, '总监'), (3, '普通'),), default=3)
    depart = models.ForeignKey(verbose_name='部门', to='Depart', on_delete=models.CASCADE, default=1)
    c_time = models.DateTimeField(verbose_name='创建时间', auto_now=True)

序列化类(Serializer)

class UserSerializer(serializers.Serializer):
    username = serializers.CharField()
    password = serializers.CharField()
    token = serializers.CharField()
    role = serializers.IntegerField()

序列化类(ModelSerializer)

class UserSerializer(serializers.ModelSerializer):
    # 自定义显示字段
    # choice 显示
    role_text = serializers.CharField(source='get_role_display')
    # 外键显示
    depart = serializers.CharField(source='depart.name')
    # 时间格式化
    c_time = serializers.DateTimeField(format='%Y-%m-%d')
    # 自定义字段
    xxx = serializers.SerializerMethodField()
    class Meta:
        model = models.UserInfo
        fields = '__all__'
    # 定义xxx字段显示什么
    def get_xxx(self, obj):
        # obj 代表当前类对象
        return obj.username

view

class UserView(OrPermissionAPIView):

    def get(self, request, *args, **kwargs):
        # 单个对象
        user = models.UserInfo.objects.all().first()
        user = UserSerializer(instance=user)
        # 多个对象
        queryset = models.UserInfo.objects.all()
        queryset = UserSerializer(instance=queryset, many=True)
        return Response(queryset.data)

image
image

posted @ 2022-10-04 09:19  Sherwin_szw  阅读(21)  评论(0编辑  收藏  举报