Django-如何在序列化器中创建深度设置的关系对象?

时间:2015-07-21 02:12:16

标签: python django rest

有两个表,userphone;手机具有链接到用户表的外键phone_user。在序列化程序中设置深度后,我们可以从用户处获取电话信息。因此' Get'手机会返回手机的完整数据而非手机ID。

问题是如何创建与现有用户链接的新手机?此问题与创建嵌套对象相同。我试图用完整的用户数据发送json但是失败了。错误说" phone_user cannot be null"。用户已在电话中明确添加,为什么它说用户为空?

现在请告诉我如何照顾这个。

class PhoneSerializer(serializers.ModelSerializer):
    class Meta:
        model=Phone
        depth=1

class PhoneViewSet(viewsets.ModelViewSet):
    queryset=Phone.objects.all()
    serializer_class=PhoneSerializer

user=requests.get("http://127.0.0.1/users/1/")
phone=dict()
phone['phone_user']=user
json_str=json.dumps(phone)

// returns 500 error code
request.post("http://127.0.0.1/phones/", data=json_str, headers=...)

Django还说" Django无法创建嵌套对象,你可以使用自定义的创建或设置read_only = True "。

1 个答案:

答案 0 :(得分:1)

由于序列化程序的深度设置为1,因此需要仅使用用户的ID进行反序列化。所以,而不是

phone['phone_user']=user

你应该改为使用

phone['phone_user']=user['id']

这假设您返回的用户对象有一个id字段。