簡體   English   中英

如何從Django userchangeform中的登錄頁面刪除用戶名字段

[英]how to remove username field from login page in django userchangeform

登錄頁面中有三個字段(用戶名,電子郵件,密碼),但我只想兩個字段(電子郵件,密碼)。 如何從登錄頁面刪除用戶名字段。 提前致謝

models.py

from django.db import models
from django.contrib.auth.models import AbstractUser


class CustomUser(AbstractUser):
    name = models.CharField(max_length=255)

    def __str__(self):
    return self.email

表格

from django import forms
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
from .models import CustomUser

class CustomUserCreationForm(UserCreationForm):
    class Meta(UserCreationForm):
        model = CustomUser
        fields = ('username','email')

class CustomUserChangeForm(UserChangeForm):
    class Meta:
        model = CustomUser
        fields = UserChangeForm.Meta.fields

序列化器

from rest_framework import serializers
from . import models

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.CustomUser
        fields = ('email', 'username', )

從登錄端點刪除字段username

您可以通過覆蓋LoginSerializer來刪除字段username ,如下所示:

from rest_auth.serializers import LoginSerializer as RestAuthLoginSerializer


class LoginSerializer(RestAuthLoginSerializer):
    username = None

然后在您的settings.py添加以下內容:

REST_AUTH_SERIALIZERS = {'LOGIN_SERIALIZER': 'path.to.your.LoginSerializer'}

ACCOUNT_AUTHENTICATION_METHOD = 'email'

ACCOUNT_EMAIL_REQUIRED = True

添加端點以更改電子郵件和密碼

事實證明,這實際上不是OP的問題,但出於完整性考慮,我將其留在此處。

您可以添加一個端點來更改用戶設置,如下所示:

from rest_framework import serializers, generics
from . import models


class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.CustomUser
        fields = ('email', 'password')


class UserChangeView(generics.UpdateAPIView):
    queryset = models.CustomUser.objects.all()
    serializer_class = UserSerializer

順便說一句,您不需要API的表單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM