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)