class mB(models.Model):
# 通过迁移数据会有 默认的 主键 id
sex_chocise = ((1, '男'), (2, '女))
sex = models.SmallIntegerField(verbose_name='性别', choices=sex_choices, default=1)
age= models.SmallIntegerField(verbose_name='年龄', default=0)
class mA(models.Model):
num = models.CharField(verbose_name='学号', max_lenght=5, primary_key=True)
name = models.CharField(verbose_name='姓名', max_lenght=10, null=False, blank=False)
sex_age = models.OneToOneField(verbose_name='性别年龄', to=mB, on_delete=models.CASCADE)
# 有两个模型序列化器 Aser,Bser 关系 如下
class Bser(ModelSerializer):
model = mB
fields = '__all__'
class Aser(ModelSerializer):
a = Bser() # 嵌套序列化器
model = mA
fields = '__all__'
class TestView(APIView):
def get(self, request):
queryset = mA.objects.all()
ser = Aser(queryset, many=True)
return Response(ser.data)
def put(self, request, num):
instance = mA.objects.get(pk=num)
ser = Aser(instance=instance, data=request.data)
if ser.is_valid(raise_exception=True):
ser.save()
return Response(ser.data)
[
{
"num": "10010",
"name": "张三",
"sex_age": {
"id": "1"
"sex": "1",
"age": "18"
}
},
{
"num": "10011",
"name": "李四",
"sex_age": {
"id": "2",
"sex": "1",
"age": "19"
}
}
]
The `.update()` method does not support writable nested fields by default.
Write an explicit `.update()` method for serializer `atms_management.serializers.TestSerializer`, or set `read_only=True` on nested serializer fields.
怎么在不修改模型关系和序列化之间的关系的基础上,怎么对序列化里嵌套序的列化器中的字段数据进行修改。
set read_only 不是自己想要的结果。