gpt4 book ai didi

python - 用于 POST 的 Django Rest-Framework 嵌套序列化器

转载 作者:太空宇宙 更新时间:2023-11-03 16:34:29 25 4
gpt4 key购买 nike

我正在尝试为用户和配置文件模型编写一个嵌套序列化器,并且我正在遵循以下示例:

class UserSerializer(serializers.ModelSerializer):
profile = ProfileSerializer()

class Meta:
model = User
fields = ('username', 'email', 'profile')

def create(self, validated_data):
profile_data = validated_data.pop('profile')
user = User.objects.create(**validated_data)
Profile.objects.create(user=user, **profile_data)
return user

但我收到此错误:

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

我什至尝试将其添加到验证异常中,如下所示:

def get_validation_exclusions(self):
exclusions = super(ProfileSerializer,
self).get_validation_exclusions()
return exclusions + ['user']

我想我通过添加以下内容解决了这个问题:

user = serializers.ModelField(model_field=Profile()._meta.get_field(
'user'), required=False)

但我还不确定。

最佳答案

ProfileSerializer 中的 user 字段设置为只读(或直接删除)

class ProfileSerializer(serializers.ModelSerializer):
class Meta:
model = Profile
fields = ('user', 'gender', 'phone', ...)
read_only_fields = ('user',)


class UserSerializer(serializers.ModelSerializer):
profile = ProfileSerializer()

class Meta:
model = User
fields = ('username', 'email', 'profile')

def create(self, validated_data):
profile_data = validated_data.pop('profile')
user = User.objects.create(**validated_data)
Profile.objects.create(user=user, **profile_data)
return user

保持 UserSerializer 不变,您将不会再收到此错误。

关于python - 用于 POST 的 Django Rest-Framework 嵌套序列化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37330044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com