用于用户创建的 DRF 序列化程序嵌套字段

DRF Serializer Nested Field for User Creation

所以我有一个自定义模型 - 配置文件,它与 django 用户对象具有 OneToOne 关系。

class Profile(models.Model):
    user = OneToOneField(User, on_delete=models.CASCADE)
    profile_type = models.CharField()

我想制作一个 django rest 框架序列化程序,它允许创建和检索用户对象的嵌套属性以及 "profile_type" 属性。

我希望在 POST 请求中像 "username"、"password"、"email" 等一样简单地指定名称 - 而不是 "profile_username", "profile_password", ...

到目前为止我有

class ProfileSerializer(serializers.ModelSerializer):
    username = serializers.CharField(source='profile_user_username')
    password = serializers.CharField(source='profile_user_password')
    email = serializers.CharField(source='profile_user_email')

    class Meta:
        model = Profile
        fields = ('id',
                  'profile_user_username', 'profile_user_password', 'profile_user_email',
                  'username',
                  'password',
                  'email')
        depth = 2

但是 - 我遇到了一个错误:

ImproperlyConfigured: Field name 'profile_user_username' is not valid for model 'Profile'

我是不是理解错了嵌套字段的语法?还是其他原因?

尝试:

class User(models.Model):
    username = models.CharField()
    password = models.CharField()
    email = models.CharField()

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User

class ProfileSerializer(serializers.ModelSerializer):
    user = UserSerializer(many=True)
    class Meta:
        model = Profile
        fields = ('user', 'profile_type',)

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

并查看 this 用于可写嵌套序列化程序。

处理嵌套对象: 检查这个 this