首页 文章

如何在Django REST框架api中进行用户注册

提问于
浏览
1

我搜索了整个网络,无法找到任何令人满意的答案,我通过添加一些自定义字段更改了我的用户模型

所以现在我得到'用户名','密码','电子邮件','first_name','last_name','phonenumber','地址'

代替

'username','password','email','first_name','last_name',---(这些都是默认值)---

这是我的models.py

from __future__ import unicode_literals
from django.db import models
from django.contrib.auth.models import User

class userinformation(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    phonenumber = models.CharField(max_length=100)
    address = models.CharField(max_length=200)
    class Meta:
        verbose_name_plural = "User Information"
    def __str__(self):
        return str(self.user)+' - '+self.phonenumber+' - '+self.address

我试图制作一个我可以发布的Django REST框架API

'username',
        'password',
        'email',
        'first_name',
        'last_name',
        'phonenumber',
        'address'

并使用这些详细信息向用户注册我应该在我的veiws.py和serializers.py中添加什么

1 回答

  • 2

    添加这些其他字段来自操纵序列化程序 . 如果将字段 related_name='user_information' 添加到模型定义中,则可以执行类似这样的操作来公开这些字段:

    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='user_information')
    

    然后你创建一个序列化器,如:

    class UserSerializer(serializers.HyperlinkedModelSerializer):
    
        phonenumber = serializers.CharField(source='user_information.phonenumber')
        address = serializers.CharField(source='user_information.address')
    
        class Meta:
            model = User
    
            fields = ('username', 'password', 'email', 'first_name', 'last_name',
                'phonenumber', 'address')
    

    并在视图中实例化该序列化程序:

    class UserViewSet(viewsets.ModelViewSet):
        queryset = User.objects.all()
        serializer_class = UserSerializer
        [...]
    

相关问题