[英]How to add extra fields to registration end point of rest-auth
我正在使用 rest-auth 注册 api 进行用户注册。 我在UserProfile
模型中有一些额外的字段。
from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
org_id = models.CharField(max_length=100, default='')
is_teacher = models.BooleanField(blank=True, default=False)
def __str__(self):
return self.user.username
def create_profile(sender, **kwargs):
if kwargs['created']:
user_profile = UserProfile.objects.create(user=kwargs['instance'])
post_save.connect(create_profile, sender=User)
UserProfile
模型如上所示。 如何将这些字段添加到 rest-auth 注册 api 端点并将数据保存到数据库。
我为自己找到了答案
序列化器可以写成
from rest_framework import serializers
from rest_auth.registration.serializers import RegisterSerializer
from .models import UserProfile
class RegistrationSerializer(RegisterSerializer):
first_name = serializers.CharField(required=False)
last_name = serializers.CharField(required=False)
personal_id = serializers.CharField(required=True)
def custom_signup(self, request, user):
user.first_name = self.validated_data.get('first_name', '')
user.last_name = self.validated_data.get('last_name', '')
user.userprofile.personal_id = self.validated_data.get(
'personal_id', '')
user.save(update_fields=['first_name', 'last_name'])
user.userprofile.save(update_fields=['org_id'])
我没有添加is_teacher
因为它是可选的。
在views.py中,扩展rest_auth.regeistration.views
的RegisterView
以传递此数据及其完成。
class RegistrationView(RegisterView):
serializer_class = RegistrationSerializer
最后添加一个URL并传递RegisterView.as_view()
。
我认为您应该创建自己的序列化程序,并按照此处所述设置USER_DETAILS_SERIALIZER设置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.