将当前的“用户”分配为嵌套序列化程序的外键

时间:2018-12-10 05:58:05

标签: python django python-3.x django-rest-framework

我正在尝试使用嵌套序列化器将当前的“用户”分配给两个模型。

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

我得到的是邮递员的输出。

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

我想知道一种将“用户”传递给这两种模型创建的方法。

1 个答案:

答案 0 :(得分:1)

您需要从user的字段中删除UserAddressSerializer

class UserAddressSerializer(serializers.ModelSerializer):

    class Meta:
        model = UserAddress
        fields = ('address_1', 'address_2', 'country',  # <-- Here
                  'state_province', 'city', 'zip_code')