Python 具有源的DRF ModelSerializer字符域未出现在已验证的\u数据中

Python 具有源的DRF ModelSerializer字符域未出现在已验证的\u数据中,python,django,django-rest-framework,Python,Django,Django Rest Framework,我有一个这样的模型: 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

我有一个这样的模型:

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\u name
的参数,但我得到了以下错误:

KeyError:“名字”

当我在调试模式下运行程序时,我可以看到
validated\u data
是空的

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


似乎有什么东西使此字段成为只读,我如何更改它?

验证的\u数据不直接包含
第一个\u名称
数据。它包含在嵌套的
user
字典中。因此,您应该首先在create方法中获取
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