Назначение текущего «пользователя» в качестве внешнего ключа для вложенных сериализаторов - PullRequest
0 голосов
/ 10 декабря 2018

Я пытаюсь назначить текущего 'пользователя' двум моделям, используя вложенные сериализаторы.

class UserAddressSerializer(serializers.ModelSerializer):

    class Meta:
        model = UserAddress
        fields = ('user', 'address_1', 'address_2', 'country',
                  'state_province', 'city', 'zip_code')


class UserProfileSerializer(serializers.ModelSerializer):
    user_address = UserAddressSerializer()
    user = serializers.HiddenField(default=serializers.CurrentUserDefault())

    class Meta:
        model = UserProfile
        fields = ('user', 'first_name', 'middle_name', 'last_name',
                  'title', 'display_name', 'time_zone', 'user_address', 'default_office')

    def create(self, validated_data):
        user = validated_data.pop('user')
        user_address_data = validated_data.pop('user_address')
        user_address_object = UserAddress.objects.create(
            user=user, **user_address_data)
        user_profile_object = UserProfile.objects.create(
            user=user, **validated_data)

        return user

Что я получаю, так это вывод в Postman.

{
    "user_address": {
        "user": [
            "This field is required."
        ]
    }
}

Я хочузнать способ передачи 'User' в обе эти модели создания.

1 Ответ

0 голосов
/ 10 декабря 2018

Вам необходимо удалить user из полей UserAddressSerializer:

class UserAddressSerializer(serializers.ModelSerializer):

    class Meta:
        model = UserAddress
        fields = ('address_1', 'address_2', 'country',  # <-- Here
                  'state_province', 'city', 'zip_code')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...