![](/img/trans.png)
[英]How to override django 'unique' error message for username in custom 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.