у меня проблема в djangorest profile_data = validated_data.pop(‘профиль’) Ошибка ключа: ‘профиль’

#python #django #django-rest-framework

#python #django #django-rest-framework

Вопрос:

 class UserSerializer(serializers.ModelSerializer):

    class Meta:
        model = UserProfile
        fields = ('first_name', 'last_name', 'phone_number', 'age', 'gender')


class UserRegistrationSerializer(serializers.ModelSerializer):

    profile = UserSerializer(required=False)
    
    class Meta:
        model = User
        fields = ('email', 'password', 'profile')
        extra_kwargs = {'password': {'write_only': True}}

    def create(self, validated_data):
        profile_data = validated_data.pop('profile')
        user = User.objects.create_user(**validated_data)
        
        UserProfile.objects.create(
            user=user,
            first_name=profile_data['first_name'],
            last_name=profile_data['last_name'],
            phone_number=profile_data['phone_number'],
            age=profile_data['age'],
            gender=profile_data['gender']
        )
        return user
  

Комментарии:

1. Пожалуйста, добавьте отдельный текст, объясняющий вашу проблему и то, что вы пробовали до сих пор.

2. я только что попытался зарегистрироваться с помощью postman, тогда возникает ошибка occureprofile_data = validated_data.pop(‘профиль’) Ошибка ключа: ‘профиль’

Ответ №1:

Привет и добро пожаловать в StackOverflow.

Я предполагаю, что, поскольку UserRegistrationSerializer поле profile не требуется, вам нужно управлять случаем, когда оно отсутствует в validated_data

например, с чем-то подобным

  def create(self, validated_data):
        # the second param is the default
        profile_data = validated_data.pop('profile', None)  

        user = User.objects.create_user(**validated_data)

        if profile_data:
            UserProfile.objects.create(
                user=user,
                first_name=profile_data['first_name'],
                last_name=profile_data['last_name'],
                phone_number=profile_data['phone_number'],
                age=profile_data['age'],
                gender=profile_data['gender']
            )
        return user
  

Комментарии:

1. его рабочий рабочий брат, спасибо большое .. можете ли вы отправить ссылку на свой профиль linkedin здесь

2. если это работает, отметьте мой ответ как решение, чтобы другие люди могли его найти. профиль LinkedIn доступен здесь, если пользователь нажмет на мое имя