0

我正在尝试使用 dj-rest-auth 库实现身份验证,到目前为止一切正常,但是当我尝试更新用户时,它说存在同名用户。

user/ 是我的 url,它给我一个 PUT 和 PATCH 方法的视图。但是机器人不工作,如果我更改我的用户名,它会更新。

网址.py

urlpatterns = [
    # path('', views.login, name="login"),
    path('login/', LoginView.as_view()),
    path('logout/', LogoutView.as_view()),
    path('register/', RegisterView.as_view()),
    path('verify-email/', VerifyEmailView.as_view(), name='rest_verify_email'),
    path('account-confirm-email/', VerifyEmailView.as_view(), name='account_email_verification_sent'),
    path('account-confirm-email/<str:key>/', ConfirmEmailView.as_view()),
    re_path(r'^account-confirm-email/(?P<key>[-:\w]+)/$',
         VerifyEmailView.as_view(), name='account_confirm_email'),
    path('user/', UserDetailsView.as_view()),
    path('google/connect/', GoogleLogin.as_view(), name='google_connect')

]

模型.py

USER_TYPE_CHOICE = (
    ('admin', 'admin'),
    ('student', 'student'),
    ('instructor', 'instructor'),
)

class CustomUser(AbstractUser):
    phone = models.CharField(max_length=12)
    user_type = models.CharField(max_length=20, choices=USER_TYPE_CHOICE, default='student')

# class UserProfile(models.Model):
#     user = models.OneToOneField(CustomUser, related_name='userprofile', on_delete=models.CASCADE)
#     # custom fields for user
#     full_name = models.CharField(max_length=100)
#     profile_pic = models.ImageField()

序列化程序.py

from dj_rest_auth.serializers import UserDetailsSerializer, PasswordResetSerializer
from rest_framework import serializers
from django.conf import settings
from allauth.account.adapter import get_adapter
from allauth.account.utils import setup_user_email
from dj_rest_auth.registration.serializers import RegisterSerializer
from .models import *
from allauth.account.forms import ResetPasswordForm, ResetPasswordKeyForm


class CustomRegisterSerializer(RegisterSerializer):
    phone = serializers.CharField(required=True, max_length=100)

    def get_cleaned_data(self):
        data_dict = super().get_cleaned_data()
        data_dict['phone'] = self.validated_data.get('phone', '')
        data_dict['user_type'] = self.validated_data.get('user_type', '')
        return data_dict


class CustomUserDetailsSerializer(UserDetailsSerializer):

    class Meta(UserDetailsSerializer.Meta):
        fields = UserDetailsSerializer.Meta.fields + \
            ('phone', 'user_type', )


class CustomPasswordResetSerializer(PasswordResetSerializer):
    password_reset_form_class = ResetPasswordForm
4

0 回答 0