我试图覆盖Djoser用户注册序列化程序,以向用户模型添加自定义字段。以下是我的models.py
from django.db import models
class User(models.Model):
email = models.CharField(max_length=100, blank=False)
first_name = models.CharField(max_length=100, blank=False)
address = models.CharField(max_length=30, blank=True)
password = models.CharField(max_length=100, blank=False)
和我的serializers.py看起来如下:
from djoser.serializers import UserCreateSerializer as BaseUserRegistrationSerializer
class UserRegistrationSerializer(BaseUserRegistrationSerializer):
class Meta(BaseUserRegistrationSerializer.Meta):
fields = ('url', 'id', 'email', 'first_name', 'address', 'password')
这是我的view.py
from User.models import User
from User.serializers import UserRegistrationSerializer
from rest_framework import viewsets
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserRegistrationSerializer
我已按照以下方式在setting.py中配置了Djoser配置
DJOSER = {
'SERIALIZERS': {
'user_create': 'User.serializers.UserRegistrationSerializer',
},
}
我运行makemigration并进行迁移,但错误仍然存在。任何帮助表示赞赏:)
更新
我更改了我的模型文件。这是新的models.py
from django.db import models
from django.contrib.auth.models import User
class Profile(models.Model):
user = models.OneToOneField(User)
address = models.CharField(max_length=30, blank=True)
答案 0 :(得分:1)
正如@kshikama在他的回答中提到的,你不应该从django.conrib.auth.models.User继承用户模型。因此,您可以使用pip安装django-custom-user
(django-custom-user)并使用其AbstractUser
模型。
此外,您正在使用djoser作为auth端点。而且您还重写了user_create
序列化程序。所以我建议您不要为User Create制作自己的基于类的视图。只需覆盖djoser序列化程序(你已经完成)并使用它的endoint。
在你的网址中。只需包含djoser网址。
urlpatterns = [
...
url(r'^api/auth/', include('djoser.urls')),
...
]
用户创建的Djoser端点是api/auth/users/create/
。有关详细信息,请转到djoser docs
答案 1 :(得分:0)
Django已经定义了自己的User model。如果要向其添加地址字段,则需要对其进行扩展。我通常称之为扩展名" Profile"但你可以任意命名。
class Profile(Model):
user = models.OneToOneField(User)
address = models.CharField(max_length=30, blank=True)
编辑:正如Daniel Roseman在评论中所建议的那样。