как удалить поле имени пользователя со страницы входа в django userchangeform - PullRequest
0 голосов
/ 12 марта 2019

на странице входа есть три поля (имя пользователя, адрес электронной почты, пароль), но я хочу только два поля (адрес электронной почты, пароль). как удалить поле имени пользователя со страницы входа. заранее спасибо

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

forms.py

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

serializer.py

from rest_framework import serializers
from . import models

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

1 Ответ

1 голос
/ 12 марта 2019

Удалить поле username из конечной точки входа в систему

Вы можете удалить поле username, переопределив LoginSerializer следующим образом:

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

Добавить конечную точку для изменения адреса электронной почты и пароля

Оказалось, что на самом деле это был не вопрос ОП, но я оставляю его здесь для полноты.

Вы можете добавить конечную точку для изменения пользовательских настроек следующим образом:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...