views.py:
class UserAddView(APIView):
def post(self, request):
data = request.data
user_ser = UserSer(data=data)
if user_ser.is_valid():
user_ser.save()
return Response(user_ser.data)
else:
return Response({'msg': '数据不合法'})
def put(self, request):
uid = request.data.get('id')
print(request.data)
user_obj = User.objects.filter(pk=uid).first()
ser_obj = UserSer(instance=user_obj, data=request.data)
if ser_obj.is_valid():
ser_obj.save()
return Response({'msg': '修改成功', 'data': request.data})
print(ser_obj.errors)
return Response({'msg': '数据不合法'})
serializers.py
class UserSer(serializers.Serializer):
username = serializers.CharField(max_length=64)
age = serializers.IntegerField()
home = serializers.CharField(max_length=64)
hight = serializers.CharField(max_length=64)
# classrooms = serializers.PrimaryKeyRelatedField(read_only=True) # 展示id
# classrooms = serializers.StringRelatedField(read_only=True) # 展示名称
# classrooms = ClassroomSer(read_only=True) # 展示全部数据
classrooms = serializers.IntegerField(write_only=True) # 只允许写操作
roles = serializers.ListField(write_only=True) # 因为可以写入多个角色,所以要使用ListField
def create(self, validated_data):
# 获取一对多表的外键
id = validated_data.pop("classrooms")
# 获取多对多的对应关系
roles_list = validated_data.pop("roles")
# 创建user表信息,并带上外键
user_obj = User.objects.create(classrooms_id=id, **validated_data)
# 查询出符合规范的角色信息
role_obj = Role.objects.filter(id__in=roles_list)
# 往第三张表添加数据
user_obj.roles.add(*role_obj)
return user_obj
def update(self, instance, validated_data):
instance.username = validated_data.get('username', instance.username)
instance.age = validated_data.get('age', instance.age)
instance.home = validated_data.get('home', instance.home)
instance.hight = validated_data.get('hight', instance.hight)
instance.classrooms_id = validated_data.get('classrooms',instance.classrooms_id)
user_obj = User.objects.get(id=instance.id)
role_obj = Role.objects.filter(id__in=validated_data['roles'])
user_obj.roles.set(role_obj)
instance.save()
return instance