#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 доступен здесь, если пользователь нажмет на мое имя