簡體   English   中英

如何向rest-auth的注冊端點添加額外的字段

[英]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.viewsRegisterView以傳遞此數據及其完成。

class RegistrationView(RegisterView):
    serializer_class = RegistrationSerializer

最后添加一個URL並傳遞RegisterView.as_view()

我認為您應該創建自己的序列化程序,並按照此處所述設置USER_DETAILS_SERIALIZER設置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM