我无法使用 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 注册用户的主要内容,如果未能解决你的问题,请参考以下文章
我无法使用 phpunit 进行测试:无法打开文件“autoload.php”