Создать связанную модель с Djoser - PullRequest
0 голосов
/ 10 января 2020

Я пытаюсь переопределить создание пользователя по умолчанию в Django. Я использую Django Rest Framework и Djoser. Я нашел очень хороший совет для его реализации здесь: { ссылка }

, но у меня есть пользовательская модель профиля, которая называется: Userprofile, которая имеет отношение OneToOneField к моей пользовательской модели пользователя.

Вот мой сериализатор:

class UserRegistrationSerializer(serializers.ModelSerializer):
    usr_profile = UserprofileSerializer()
    email = serializers.CharField()
    password = serializers.CharField(
        write_only=True,
        style={'input_type': 'password'}
    )

    class Meta:
        model = get_user_model()
        fields = ('email', 'password', 'usr_profile')

Когда я пытаюсь сделать следующий POST-запрос к / auth / users / endopoint:

{   
    "email": "adnan@test115.se",
    "password": "xxxxxx",
    "usr_profile": {
      "first_name": "adnan",
      "last_name": "erkoc",
      "cell_no": "23233"
    },
} 

Я получаю сообщение об ошибке, что User.profile имеет быть экземпляром Userprofile.

1 Ответ

1 голос
/ 10 января 2020

Этот вопрос не имеет непосредственного отношения к Djoser, а скорее к самому DRF.

Вы можете найти ответ в документации по DRF

Вложенные записываемые сериализаторы

class UserRegistrationSerializer(serializers.ModelSerializer):
    usr_profile = UserprofileSerializer()
    email = serializers.CharField()
    password = serializers.CharField(
        write_only=True,
        style={'input_type': 'password'}
    )

    class Meta:
        model = get_user_model()
        fields = ('email', 'password', 'usr_profile')

    def create(self, validated_data):
        usr_profile = validated_data.pop('usr_profile')
        user = UserModel.objects.create(**validated_data)
        UserProfile.objects.create(user=user, **usr_profile)
        return album
...