我如何在一个请求中同时创建子对象和父对象 Django rest framework

How can i create both the child and parent object in one request Django rest framework

我有一个具有 OneToOneField(Profile) 的公司对象,并且 Profile 具有 OneToOneField(User) 我的问题是:是否可以在一个请求中创建所有三个,如果可以,我该怎么做?

我公司对象的结构

"company":{

    "profile" :{

        "user" : {

            "first_name" : "",
            "last_name" : "",
            "username" : "",
            "email" : ""
        },

        "phone" : "",

        "registered_date" : ""

    },

    "name": "",
    "address": "",
    "currency": "",
    "id_number": "",
    "vat_number": "",
    "vat_company_name": "",
    "company_email": "",
    "fixed_phone": ""
}


我尝试将此发送到 POST 请求到公司序列化器,这就是我得到的:

{
    "profile": [
        "Incorrect type. Expected pk value, received dict."
    ]
}

我可以在不覆盖序列化程序中的 .create() 的情况下执行此操作吗?

是的,您可以通过一个 API 完成。您可以更新序列化程序 create 方法。在解释输入请求格式时,您可以在序列化程序中进行以下更改。

def create(self, validated_data):
  profile_data = validated_data.pop('profile')
  user_data = profile_data.pop('user')
  user = User.objects.create(**user_data)
  profile = Profile.objects.create(user=user, **profile_data)
  company = Company.objects.create(profile=profile, **validated_data)
  return company

上面的例子就是你问题的答案。您可以根据需要在创建函数中添加额外信息并使用数据。