【问题标题】:Django- how to create relational objects with depth set in serializer?Django-如何创建在序列化程序中设置深度的关系对象?
【发布时间】:2015-07-21 02:12:15
【问题描述】:

有两个表,userphone;电话有外键phone_user 链接到用户表。在序列化程序中设置depth,我们可以从用户那里获取电话信息。因此,“获取”电话会返回电话的完整数据,而不是电话 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”。

【问题讨论】:

    标签: python django rest


    【解决方案1】:

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

    phone['phone_user']=user

    你应该改用

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

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

    【讨论】:

      猜你喜欢
      • 2011-01-23
      • 1970-01-01
      • 2014-03-14
      • 1970-01-01
      • 2014-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多