gpt4 book ai didi

django - 在 Djoser 和 Rest Framework 中使用自定义字段注册用户

转载 作者:行者123 更新时间:2023-12-03 14:27:22 56 4
gpt4 key购买 nike

我正在尝试使用来自 Djoser 的“注册”端点.它工作正常,但我需要的字段不仅仅是“用户名”、“电子邮件”和“密码”。
我见过这个 question事实上我可以看到我想要的字段(在可浏览的 API 中)。但是当我尝试发布它时,我收到此错误

ImproperlyConfigured at /account/register/ Could not resolve URL for hyperlinked relationship using view name "user-detail". You may have failed to include the related model in your API, or incorrectly configured the lookup_field attribute on this field.



我不知道出了什么问题。

我的models.py 看起来是这样的:
from django.db import models


class User(models.Model):
created = models.DateTimeField(auto_now_add=True)
email = models.CharField(max_length=100, blank=False)
name = models.CharField(max_length=100, blank=False)
last_name = models.CharField(max_length=100, blank=False)
birthday = models.CharField(max_length=15, blank=False)
password = models.CharField(max_length=100, blank=False)

class Meta:
ordering = ('created',)

序列化程序.py
from rest_framework import serializers
from users.models import User


class UserSerializer(serializers.HyperlinkedModelSerializer):

class Meta:
model = User
fields = ('url', 'id', 'email', 'name', 'last_name', 'birthday', 'password')

我的意见.py
from users.models import User
from users.serializers import UserSerializer
from rest_framework import viewsets


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

在 settings.py 中我添加了:
DJOSER = {
...
'SERIALIZERS': {
'user_registration': 'users.serializers.UserSerializer',
},
}

编辑

应用程序/urls.py
from django.conf.urls import url, include
from users import views
from rest_framework.routers import DefaultRouter
from rest_framework.schemas import get_schema_view

# Create a router and register our viewsets with it.
router = DefaultRouter()
router.register(r'users', views.UserViewSet)

schema_view = get_schema_view(title='Pastebin API')

# The API URLs are now determined automatically by the router.
# Additionally, we include the login URLs for the browsable API.

urlpatterns = [
url(r'^', include(router.urls)),
url('^schema/$', schema_view),
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]

api/urls.py
from django.conf.urls import url, include
from django.contrib import admin
from rest_framework_jwt import views as jwt_views
from rest_framework import routers

router = routers.DefaultRouter()

urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^', include(router.urls)),
url(r'^account/', include('djoser.urls')),
url(r'^auth/login/', jwt_views.obtain_jwt_token, name='auth'),
]

有人有想法吗?

最佳答案

您可以在 中创建自定义用户Django 2.0 使用 左塞尔通过继承 抽象用户 ,它会为您的应用创建一个新的用户模型,如下所示:

from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
FUNCTION = 1
VIEWER = 2
TECHNICIAN = 3
ROLE_CHOICES = (
(FUNCTION, 'Functional'),
(VIEWER, 'Viewer'),
(TECHNICIAN, 'Technician'),
)
role = models.PositiveSmallIntegerField(choices=ROLE_CHOICES, null=True, blank=True)
REQUIRED_FIELDS = ["email", "role"]

然后在 中定义了 user new User 类设置.py :
AUTH_USER_MODEL = 'app_name.User'

请注意,这里我已经定义了我的 REQUIRED_FIELDS。所以当我使用 djoser API/me/ ,它将为我提供所有必填字段。

关于django - 在 Djoser 和 Rest Framework 中使用自定义字段注册用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41579357/

56 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com