Python 如何从django userchangeform的登录页面中删除用户名字段 登录页面中有三个字段(用户名、电子邮件、密码),但我只需要两个字段(电子邮件、密码)。如何从登录页面中删除用户名字段。提前谢谢

Python 如何从django userchangeform的登录页面中删除用户名字段 登录页面中有三个字段(用户名、电子邮件、密码),但我只需要两个字段(电子邮件、密码)。如何从登录页面中删除用户名字段。提前谢谢,python,django-rest-framework,django-rest-auth,Python,Django Rest Framework,Django Rest Auth,models.py forms.py 序列化程序.py 从登录端点删除字段username 您可以通过如下方式覆盖LoginSerializer来删除字段username: 从rest\u auth.serializer将LoginSerializer作为RestAuthLoginSerializer导入 类LoginSerializer(重新授权LoginSerializer): 用户名=无 然后在设置.py中添加以下内容: REST\u AUTH\u SERIALIZER={'LOGIN\

models.py

forms.py

序列化程序.py

从登录端点删除字段
username
您可以通过如下方式覆盖
LoginSerializer
来删除字段
username

从rest\u auth.serializer将LoginSerializer作为RestAuthLoginSerializer导入
类LoginSerializer(重新授权LoginSerializer):
用户名=无
然后在
设置.py中添加以下内容:

REST\u AUTH\u SERIALIZER={'LOGIN\u SERIALIZER':'path.to.your.LOGIN SERIALIZER'}
帐户\身份验证\方法='电子邮件'
帐户\电子邮件\必需=真

添加端点以更改电子邮件和密码 事实证明,这实际上不是OP的问题,但为了完整起见,我把它留在这里

您可以添加端点来更改用户设置,如下所示:

从rest\u框架导入序列化程序、泛型
从…起导入模型
类UserSerializer(serializers.ModelSerializer):
类元:
model=models.CustomUser
字段=(“电子邮件”、“密码”)
类UserChangeView(generics.UpdateAliView):
queryset=models.CustomUser.objects.all()
serializer\u class=UserSerializer

顺便说一句,您的API不需要表单。

是的,通常有两个字段(用户名、密码)且工作正常,但当我尝试通过提供电子邮件、密码登录并将用户名保留为空时,会出现错误(“必须包括用户名”和“密码”)。有没有办法只用电子邮件和密码登录?@MuhammadHussnain你说得对,我使用的是自定义登录序列化程序,我不知道默认的序列化程序有三个字段。我相应地更新了我的答案。如果您还有其他问题,请告诉我。事实上,我是DRF的新手。我在serializers.py中定义了LoginSerializer,并将{'LOGIN_SERIALIZER':'path.to.your.LoginSerializer'}替换为{'LOGIN_SERIALIZER':'path.to.serializers.LoginSerializer'},但现在我遇到了错误(没有名为'path'的模块),没有问题<代码>“path.to.your.LoginSerializer”
必须是完整的导入路径。例如,如果您的Django应用程序(您的
models.py
所在的文件夹)被称为
myapp
,那么您的设置必须如下所示:
{'LOGIN\u SERIALIZER':'myapp.serializers.LoginSerializer}
。出于某种原因,此自定义登录不适用于我。当我转到浏览器上的url时,用户名仍然存在。
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', )