drf 序列化 提交数据库

model

class Depart(models.Model):
    name = models.CharField(verbose_name='部门名', max_length=32)
    level = models.IntegerField(verbose_name='等级',default=1)

序列化器ModelSerializer

class DepartSerializer(serializers.ModelSerializer):
    # 存入数据库时候,不需要此字段
    more = serializers.CharField()

    class Meta:
        model = models.Depart
        fields = '__all__'
        extra_kwargs = {
            "name": {"max_length": 3, "min_length": 2},
        }

    def validate_name(self, value):
        if value != 'szw':
            raise exceptions.ValidationError('字段钩子校验失败')
        return value

view

如果使用Serializer,在提交到数据库时,需要自己手动提交,如models.Depart.objects.create(**ser.validated_data)

class DepartView(OrPermissionAPIView):
    def post(self, request, *args, **kwargs):
        json_data = request.data
        ser = DepartSerializer(data=json_data)
        if ser.is_valid():
            # 存入数据库之前,把数据库没有的字段去除,并拿到值
            more = ser.validated_data.pop("more")
            # 在save里写入字段=值
            ser.save(name='atm')
            return Response("ok")
        else:
            return Response(ser.errors)
posted @ 2022-10-06 09:19  Sherwin_szw  阅读(43)  评论(0编辑  收藏  举报