我如何在一个请求中同时创建子对象和父对象 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
上面的例子就是你问题的答案。您可以根据需要在创建函数中添加额外信息并使用数据。
我有一个具有 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
上面的例子就是你问题的答案。您可以根据需要在创建函数中添加额外信息并使用数据。