1

我有一个具有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()序列化程序的情况下做到这一点吗?

4

1 回答 1

1

是的,您可以通过一个 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

上面的示例是您问题的解决方案。您可以在 create 函数中添加额外信息并根据需要使用数据。

于 2020-02-18T15:35:01.247 回答