上一章我们说到,vue前台用@click点击事件已经将用户选择后添加的数据通过POST方式提交给后台,那么这章就来说说后台django和反序列化的写法。
前台已经发送过来了数据,那么怎么django中怎么接收呢
在视图函数中通过data = request.data来获取
将获取到的数据data值经过反序列化的加工然后再通过is_valid()判断保存
那么现在就看看反序列化的方法
class TianjiaSerializer(serializers.Serializer):
name = serializers.CharField(max_length=120)
yd = serializers.ListField()
# 我数据库表格里定义的字段,那么就就一样
# 这里使用的ListField一般就是这么写没错,二来视图文件里获取的request.data前端传来的值如果打印的话,
# 获取的yd(id)就是列表(这就是打印的request.data的值{'name': 'asdas', 'yd': [1, 2]}),所以这的id用ListField
# 那么接下来转接到下图函数中的添加方法
def create(self, data):
name = data.pop('name')
yd = data.pop('yd')
# 这是列表的常见操作,pop弹出,因为pop弹出后会有返回值,不会像remove直接删除没有了,
# 我们需要它返回的name,和id,然后接下来就直接添加name就行,赋值给一个对象yinobj
# yinobj(对象).yd(id).set(*yd{这里一个*就是表示将'yd': [1, 2]这个列表打散然后添加到数据库})
yinobj = Yinyuejia.objects.create(name=name)
yinobj.yd.set(*yd)
return yinobj #然后将yinobj它返回给视图函数
这就是反序列化的代码,用set方法添加
tian = TianjiaSerializer(data=data)
在视图函数中将data值经过序列化加工
if tian.is_valid():
tian.save()
return Response({
'code': 'ok'
})
else:
print(tian.errors)
return Response({
'code': 'no'
})
保存添加到数据库中
这里是多对多关系,那么下一章附上完整的代码