我无法使用 Django-Rest-Framework 注册用户

Posted

技术标签:

【中文标题】我无法使用 Django-Rest-Framework 注册用户【英文标题】:I cannot register a user using Django-Rest-Framework 【发布时间】:2021-04-06 21:11:54 【问题描述】:

我无法使用 Django Rest Framework 添加新用户。这是我的 models.py 代码:

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    password = models.CharField(max_length=15, default= None)
    first_name = models.CharField(max_length=100, validators=[name_validator])
    last_name = models.CharField(max_length=100, validators=[name_validator])
    email = models.CharField(max_length=100, validators=[mail_validator])
    created_at = models.DateTimeField(auto_now_add=True)

如您所见,我正在使用 models.OneToOneField,因为我想扩展默认用户以添加更多字段。

下面是我的 serializers.py 文件:

class ProfileSerializer(serializers.ModelSerializer):
    class Meta:
        model = Profile
        permissions_classes = [
            permissions.AllowAny
        ]
        fields = '__all__'

视图集如下:

class UserViewset(viewsets.ModelViewSet):
    queryset = Profile.objects.all()
    serializer_class = ProfileSerializer

当我转到我的端点并尝试添加新用户时,我无法在“用户”字段中输入任何内容:

Click for image

我是初学者,对我有很大帮助。

谢谢!

【问题讨论】:

您需要有用户才能将其添加到 Profile 模型。您可以通过在添加配置文件之前添加一些用户来测试这一点。现在,当您添加配置文件时,您将获得所有可用的用户来添加到配置文件。 但我想要的是创建一个具有所有这些属性的新用户。不要从一些现有用户中选择。 为此您需要可写嵌套序列化程序。另一种方法是覆盖 user serializer 的 create 方法。检查这个答案***.com/a/29867704/4901118 【参考方案1】:

你可以这样做

from django.contrib.auth.models import User

class Profile(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    password = models.CharField(max_length=15, default= None)
    first_name = models.CharField(max_length=100, validators=[name_validator])
    last_name = models.CharField(max_length=100, validators=[name_validator])
    email = models.CharField(max_length=100, validators=[mail_validator])
    created_at = models.DateTimeField(auto_now_add=True)

serializer.py

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = "__all__"

class ProfileSerializer(serializers.ModelSerializer):
    user = UserSerializer(read_only=True)
    class Meta:
        model = Profile
        fields = '__all__'

views.py

class UserViewset(viewsets.ModelViewSet):
    queryset = Profile.objects.all()
    serializer_class = ProfileSerializer
    permission_classes = [permission. AllowAny,]

【讨论】:

请解释此代码转储如何解决 OP 遇到的问题?【参考方案2】:

当您想扩展默认用户以添加更多字段时,最好的方法是通过继承 AbstractUser 模型substituting a custom User model。使用这种方式,您可以轻松地对用户进行 CRUD。

【讨论】:

以上是关于我无法使用 Django-Rest-Framework 注册用户的主要内容,如果未能解决你的问题,请参考以下文章

为啥我无法使用 DirectInput 获取键盘?

为啥我无法使用 CAGradientLayer 的掩码

我无法使用 phpunit 进行测试:无法打开文件“autoload.php”

我无法使用本地 Mongodb 使用 Prisma 启动项目

我无法使用断点进行调试

无法使用 Maven 构建应用程序,我可以在本地运行代码,但无法在 heroku 上部署