Как сформировать объект JSON, чтобы он мог быть десериализован сериализатором вложенной модели

#django-rest-framework #django-serializer

#django-rest-framework #django-serializer

Вопрос:

У меня есть две модели CompanyDetails и User , для которых я создал две ModelSerializer как CompanyDetailsSerializer и RegisterUserSerializer .

CompanyDetailsSerializer

 class CompanyDetailsSerializer(serializers.ModelSerializer):

    class Meta:
        model = CompanyDetails
        fields = ['id', 'company_name', 'is_active']
        extra_kwargs = {
            'company_name' : {
                'required' : True,
                'allow_null' : False,
                'allow_blank' : False
            
  

}
}

RegisterUserSerializer

 class RegisterUserSerializer(serializers.ModelSerializer):
    '''
    This serializer is for Register User view.
    '''
    company = CompanyDetailsSerializer()

    class Meta:
        model = User
        fields = ['id', 'first_name', 'last_name', 'email', 'mobile_number', 'company', 'password']
        extra_kwargs = {
            'first_name' : {
                'required' : True,
                'allow_null' : False,
                'allow_blank' : False
            },
            'last_name' : {
                'required' : True,
                'allow_null' : False,
                'allow_blank' : False
            },
            'email' : {
                'required' : True,
                'allow_null' : False,
                'allow_blank' : False
            },
            'mobile_number' : {
                'required' : True,
            },
            'password' : {
                'required' : True,
                'allow_blank' : False,
                'allow_null' : False,
                'write_only': True
            }
        }
  

Запрос.данные имеют следующий JSON, который далее сериализуется с помощью RegisterUserSerializer

 {
    "first_name": "Jeet",
    "last_name": "Patel",
    "mobile_number": 9765136777,
    "email": "jpatel99967@gmail.com",
    "password": "123456",
    "comapany": {
        "company_name": "Yantra Inc"
    }
}
  

Но RegisterUserSerializer генерирует ошибку, указанную ниже.

 {
    "company": [
        "This field is required."
    ]
}
  

Как мне отправить данные JSON в сериализатор?

Ответ №1:

Для начала, у вас есть опечатка в ваших данных: comapny вместо company .

Если предположить User , что у вас есть внешний ключ Company , то данные JSON, внесенные company в ваш пользовательский JSON, должны быть действительным Company первичным ключом.