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

时间:2016-09-02 04:40:35

标签: django django-models django-rest-framework django-authentication django-serializer

所以我有一个自定义模型 - Profile,它与django User对象具有OneToOne关系。

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

我想创建一个django rest框架序列化器,它允许创建和创建User对象的嵌套属性以及" profile_type"属性。

我希望在POST请求中指定名称,只需"用户名","密码","电子邮件"等等 - 而不是& #34; 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'

我是否弄错了嵌套字段的语法?还是别的什么?

1 个答案:

答案 0 :(得分:3)

尝试:

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