Как я могу создать дочерний и родительский объект в одной структуре Django rest - PullRequest
1 голос
/ 18 февраля 2020

У меня есть объект компании, который имеет OneToOneField (профиль) , а профиль имеет OneToOneField (пользователь) Мой вопрос: возможно ли создать все три в одном запросе и если так, как я могу это сделать?

Структура объекта моей компании

"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() в сериализаторе?

1 Ответ

1 голос
/ 18 февраля 2020

Да, вы можете сделать это из одного 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

Приведенный выше пример является решением вашего вопроса. Вы можете добавить дополнительную информацию и поиграть с данными как ваше требование внутри функции создания.

...