gpt4 book ai didi

python - 如何向rest-auth的注册端点添加额外的字段

转载 作者:行者123 更新时间:2023-12-01 07:24:59 26 4
gpt4 key购买 nike

我正在使用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 regestration 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.viewsRegisterView来传递此数据及其完成。

class RegistrationView(RegisterView):
serializer_class = RegistrationSerializer

最后添加一个 url 并传递 RegisterView.as_view()

关于python - 如何向rest-auth的注册端点添加额外的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57496154/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com