Django自定义注册无法存储某些字段

时间:2016-06-13 11:07:42

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

我有一个django休息项目,其中我定制了用户模型以满足我的需求。我还创建了一个自定义序列化程序来添加更多字段,如地址,电话号码等,以便在注册时存储。我正在使用django-rest-auth进行登录和注册。可浏览的API如下所示:

enter image description here

注册成功,但无法存储地址和用户类型。

我的自定义用户模型:

class RegisterSerializer(serializers.Serializer):
email = serializers.EmailField(required=allauth_settings.EMAIL_REQUIRED)
first_name = serializers.CharField(required=True, write_only=True)
last_name = serializers.CharField(required=True, write_only=True)
address = serializers.CharField(max_length=500, required=True, write_only=True)
#user_type = serializers.CharField(required=True, write_only=True)

user_type = serializers.ChoiceField(
choices=[('Farmer', 'Farmer'),('Windmill owner', 'Windmill owner'),('Solar panel owner', 'Solar panel owner'),],
style={'base_template': 'radio.html'},
required=True, write_only=True)


password1 = serializers.CharField(required=True, write_only=True)
password2 = serializers.CharField(required=True, write_only=True)

def validate_email(self, email):
    email = get_adapter().clean_email(email)
    if allauth_settings.UNIQUE_EMAIL:
        if email and email_address_exists(email):
            raise serializers.ValidationError(
                _("A user is already registered with this e-mail address."))
    return email

def validate_password1(self, password):
    return get_adapter().clean_password(password)

def validate(self, data):
    if data['password1'] != data['password2']:
        raise serializers.ValidationError(
            _("The two password fields didn't match."))
    return data

def get_cleaned_data(self):
    return {
        'first_name': self.validated_data.get('first_name', ''),
        'last_name': self.validated_data.get('last_name', ''),
        'address': self.validated_data.get('address', ''),
        'user_type': self.validated_data.get('user_type', ''),
        'password1': self.validated_data.get('password1', ''),
        'email': self.validated_data.get('email', ''),
    }

def save(self, request):
    adapter = get_adapter()
    user = adapter.new_user(request)
    self.cleaned_data = self.get_cleaned_data()
    adapter.save_user(request, user, self)
    setup_user_email(request, user, [])
    user.save()
    return user

我的寄存器序列化器:

test_state

到底出了什么问题?为什么不存储这些字段?

0 个答案:

没有答案
相关问题