Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
添加用户时出现问题';s在Django admin中的电子邮件_Django_Django Models_Django Forms_Django Admin_Django Users - Fatal编程技术网

添加用户时出现问题';s在Django admin中的电子邮件

添加用户时出现问题';s在Django admin中的电子邮件,django,django-models,django-forms,django-admin,django-users,Django,Django Models,Django Forms,Django Admin,Django Users,我创建了一个扩展AbstractUser的自定义模型,以便通过电子邮件instad of by username对用户进行身份验证(但不想删除用户名,因为它也会被使用) 这是我在运行第一次迁移之前做的第一件事,除了在Django管理中,其他一切都正常工作。当我创建一个新用户时,我希望这些字段被填充 用户名 电子邮件 密码 管理员只要求我输入用户名和密码。我怎样才能添加电子邮件呢?这是我的密码 models.py from django.db import models from django.c

我创建了一个扩展AbstractUser的自定义模型,以便通过电子邮件instad of by username对用户进行身份验证(但不想删除用户名,因为它也会被使用)

这是我在运行第一次迁移之前做的第一件事,除了在Django管理中,其他一切都正常工作。当我创建一个新用户时,我希望这些字段被填充 用户名 电子邮件 密码

管理员只要求我输入用户名和密码。我怎样才能添加电子邮件呢?这是我的密码

models.py

from django.db import models
from django.contrib.auth.models import AbstractUser
from django.contrib.auth.base_user import BaseUserManager
from django.utils.translation import ugettext_lazy as _


class CustomUserManager(BaseUserManager):
    """
    Custom user model manager where email is the unique identifier for 
    authentication instead of username.
    """
    def create_user(self, email, password, **extra_fields):
        """
        Create and save a User with the given email and password.
        """
        if not email:
            raise ValueError(_('The Email must be set'))
        email = self.normalize_email(email)
        user = self.model(email=email, **extra_fields)
        user.set_password(password)
        user.save()
        return user
    
    def create_superuser(self, email, password, **extra_fields):
        """
        Create and save a SuperUser with the given email and password.
        """
        extra_fields.setdefault('is_staff', True)
        extra_fields.setdefault('is_superuser', True)
        extra_fields.setdefault('is_active', True)

        if extra_fields.get('is_staff') is not True:
            raise ValueError(_('Superuser must have is_staff=True.'))
        if extra_fields.get('is_superuser') is not True:
            raise ValueError(_('Superuser must have is_superuser=True.'))
        return self.create_user(email, password, **extra_fields)


class User(AbstractUser):
    email = models.EmailField(_('email address'), unique=True)
    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []
    objects = CustomUserManager()

    def __str__(self):
        return self.email
管理员

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import User as CustomUser


class CustomUserAdmin(UserAdmin):
    model = CustomUser
    list_display = ('email', 'is_staff', 'is_active',)
    list_filter = ('eamil', 'is_staff', 'is_active',)
    fieldsets = (
        (None, {'fields': ('email', 'password')}),
        ('Permissions', {'fields': ('is_staff', 'is_active')}),
    )
    add_fieldsets = (
        (None, {
            'classes': ('wide',),
            'fields': ('email', 'password1', 'password2', 'is_staff', 'is_active')}
        ),
    )
    search_fields = ('email',)
    ordering = ('email',)

admin.site.register(CustomUser, UserAdmin)
我该怎么办?看起来一切都是正确的,但缺少必需的电子邮件字段。请注意,这仅在我使用admin中的Add User功能时发生。当我创建超级用户或登录到管理员时,一切都按预期进行

更新: 这是我表单的内容

from django.contrib.auth.forms import UserCreationForm
# the user model was customized it should be invoked
from django.contrib.auth import get_user_model
from django.contrib.auth import forms as auth_forms
from .models import User as CustomUser


class UserChangeForm(auth_forms.UserChangeForm):
    class Meta(auth_forms.UserChangeForm.Meta):
        model = CustomUser

class UserCreationForm(auth_forms.UserCreationForm):
    class Meta(auth_forms.UserCreationForm.Meta):
        model = CustomUser
        fields = ("username", "email")


class CustomUserCreationForm(UserCreationForm):
    class Meta(UserCreationForm.Meta):
        # the user model was customized it should be invoked
        model = get_user_model()
        fields = UserCreationForm.Meta.fields + ("email",)
这里是我的admin.py的内容(更新)

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import User as CustomUser
from .forms import UserChangeForm, UserCreationForm

class CustomUserAdmin(UserAdmin):
    model = CustomUser
    list_display = ('email', 'username', 'is_staff', 'is_active',)
    list_filter = ('eamil', 'username', 'is_staff', 'is_active',)
    form = UserChangeForm
    add_form = UserCreationForm
    
    fieldsets = (
        (None, {'fields': ('email', 'username', 'password')}),
        ('Permissions', {'fields': ('is_staff', 'is_active')}),
    )
    add_fieldsets = (
        (None, {
            'classes': ('wide',),
            'fields': ('email', 'username', 'password1', 'password2', 'is_staff', 'is_active')}
        ),
    )
    search_fields = ('email',)
    ordering = ('email',)

admin.site.register(CustomUser, UserAdmin)

但是我仍然有同样的问题,我仍然无法在/admin/users/user/add/

中添加电子邮件字段
UserAdmin
类具有
form
add\u form
属性,它们分别指向用于编辑和创建用户的表单类。当这两个表单是为默认用户模型创建的时,您需要重写这些表单类并自己设置这些属性

首先定义这些自定义表单:

from django.contrib.auth import forms as auth_forms
from .models import User as CustomUser

class UserChangeForm(auth_forms.UserChangeForm):
    class Meta(auth_forms.UserChangeForm.Meta):
        model = CustomUser


class UserCreationForm(auth_forms.UserCreationForm):
    class Meta(auth_forms.UserCreationForm.Meta):
        model = CustomUser
        fields = ("username", "email")
接下来在
CustomUserAdmin
中设置这些:

from .forms import UserChangeForm, UserCreationForm


class CustomUserAdmin(UserAdmin):
    # Your other attributes here
    form = UserChangeForm
    add_form = UserCreationForm

我应该在哪里定义这些自定义表单?在forms.py或admin.py?@ionecum中
forms.py
(您也可以在自己的视图中使用这些表单)。它仍然不起作用。我仍然无法在中输入电子邮件迁移文件是否可能导致冲突?我开始用一个空类扩展原始用户的模型,这个空类上有一个简单的“pass”。然后,在第一次迁移之后,我添加了email字段。第一次迁移后更改扩展用户类是否会产生冲突?例如,如果我将first_name和last_name移动到另一个模型,并在扩展用户模型中将它们设置为None,是否会产生迁移冲突?我有这种怀疑和怀疑。以下是我所做的:在第一次迁移之前1。我用空的class 2扩展了用户的模型。在第一次迁移之后,我将AUTH_USER_MODEL='users.USER'放入设置中:1。我将电子邮件设置为身份验证的用户名email=models.EmailField(u('email address'),unique=True)username\u FIELD='email',并编辑了类的其余部分。