我有一个这样的模型:
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'
当我在调试模式下运行程序时,我可以看到validated_data
为空!
另一点是,当我向字段添加write_only
时,它会显示在validated_data
中,但我不希望该字段为write_only
!
似乎某些内容正在制作此字段read_only
,我该如何更改?
答案 0 :(得分:2)
Validated_data不直接包含first_name
数据。它包含在嵌套的user
字典中。因此,您应首先在create method中获取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