gpt4 book ai didi

python - 带有源的 DRF ModelSerializer CharField 未出现在 validated_data 中

转载 作者:行者123 更新时间:2023-12-01 01:53:49 25 4
gpt4 key购买 nike

我有一个这样的模型:

class AppUser(models.Model):
user = models.OneToOneField(User, related_name='app_user')

我有一个此类的序列化器:

class AppUserSerializer(serializers.ModelSerializer):
first_name = serializers.CharField(source='user.first_name')

class Meta:
model = AppUser
fields = ('first_name',)

def create(self, validated_data):
first_name = validated_data.pop('first_name')
user = User.objects.create_user(username='test', first_name=first_name, last_name='test')
app_user = AppUser.objects.create(**validated_data, user=user)
return app_user

但是当我尝试使用此序列化程序创建用户时,尽管我发送了一个名为 first_name 的参数,但我收到此错误:

KeyError: 'first_name'

当我在 Debug模式下运行程序时,我可以看到 validated_data 为空!

另一点是,当我将 write_only 添加到该字段时,它会出现在 validated_data 中,但我不希望该字段为 write_only >!

似乎有什么东西正在使该字段read_only,我该如何更改它?

最佳答案

Validated_data 不直接包含 first_name 数据。它包含在嵌套的 user 字典中。因此,您应该首先在创建方法中获取用户数据:

def create(self, validated_data):
user_data = validated_data.pop('user')
first_name = user_data.pop('first_name')
user = User.objects.create_user(username='test', first_name=first_name, last_name='test')
app_user = AppUser.objects.create(**validated_data, user=user)
return app_user

关于python - 带有源的 DRF ModelSerializer CharField 未出现在 validated_data 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50444958/

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