Django 管理员错误“请更正以下错误。

Django admin error "Please correct the errors below."

提问人:Muhammad Nabeel 提问时间:12/5/2018 最后编辑:Davit TovmasyanMuhammad Nabeel 更新时间:3/28/2022 访问量:1871

问:

我已经制作了自定义 BaseUserManager 来创建用户,但是当我从 django 管理面板添加用户时,我收到“请更正以下错误”的错误,但我找不到出了什么问题。

Models.py:

class UserManager(BaseUserManager):

    def create_user(self,email,password):
        user = self.model(email=email)
        user.set_password(password)

    def create_superuser(self,email,password):
        user = self.model(email=email)
        user.set_password(password)
        user.is_admin = True
        user.is_superuser = True
        user.is_staff=True
        user.save(using=self._db)




class User(AbstractBaseUser,PermissionsMixin):

    COMPANY='CO'
    EMPLOYEE='EM'
    STATUS_CHOICES=(
        (COMPANY,'Company'),
        (EMPLOYEE,'Employee'),
    )
    Status=models.CharField(max_length=2,
                            choices=STATUS_CHOICES,
                            default=EMPLOYEE)
    user_image = models.CharField(max_length=100)
    is_admin=models.BooleanField()
    email=models.EmailField(unique=True)
    is_staff=models.BooleanField(default=False)
    object = UserManager()
    USERNAME_FIELD='email'
    REQUIRED_FIELDS = []

    objects=models.Manager()

    def get_short_name(self):
        return self.email

Admin.py 文件:

class UserAdmin(UserAdmin):
    list_display = ('email', 'is_admin')
    list_filter = ('is_admin',)

    fieldsets = (
        (None, {'fields': ('email', 'password','Status','user_image','last_login')}),

        ('Permissions', {'fields': ('is_admin','is_staff','is_superuser','user_permissions','groups')}),
    )

    add_fieldsets= (
        (None, {'fields': ('email', 'password','Status','user_image','last_login')}),

        ('Permissions', {'fields': ('is_admin','is_staff','is_superuser','user_permissions','groups')}),
    )

    search_fields = ('password',)
    ordering = ('password',)
    filter_horizontal = ()



admin.site.register(User,UserAdmin)
admin.site.register(Company)
admin.site.register(Employee)
admin.site.register(Job)
admin.site.register(AppliedJobs)

有人可以建议我做错了什么吗?当我从管理面板添加用户时,我总是收到错误。我无法弄清楚,因为我是第一次在baseusermanager上工作。

django django-custom-manager

评论


答:

0赞 GCru 9/20/2020 #1

我可以建议如何尝试找到问题。通常,您将参考表格,见下文:UserAdmin

class UserAdmin(UserAdmin):
    add_form = SignUpForm
    form = CustomUserChangeForm

您可以使用日志记录找出导致错误的原因。将以下 Mixin 添加到您的 and :SignUpFormCustomUserChangeForm

import logging

logger = logging.getLogger(__name__)


# see https://stackoverflow.com/questions/20833638/how-to-log-all-django-form-validation-errors
class LoggingMixin(object):
    def add_error(self, field, error):
        if field:
            logger.info('Form error on field %s: %s', field, error)
        else:
            logger.info('Form error: %s', error)
        super().add_error(field, error)

# e.g.
class SignUpForm(LoggingMixin, UserCreationForm):
    ....

现在,登录或更改用户并检查日志以找出导致“请更正以下错误”的原因。

0赞 max_bstr 3/26/2022 #2

有同样的问题,答案很简单。

问题出在你的.Django 使用他自己的模式来添加新用户(你可以在文件中的模型中检查它)。您需要定义 和 的字段。add_fieldsetsUserAdmindjango.contrib.auth.admin.pypassword1password2

为了您的方便,我将它粘贴在那里:

add_fieldsets = (
    (None, {
        'classes': ('wide',),
        'fields': ('username', 'password1', 'password2'),
    }),
)

在这里,您有 2 个选项:
P.S. 在任何情况下您都需要定义 和 字段。
usernamepassword1password2

  1. 使用超类字段并添加您的自定义:
add_fieldsets = UserAdmin.add_fieldsets + (
    (None, {'fields': ('email', 'Status', 'user_image', 'last_login')}),
    ('Permissions', {'fields': ('is_admin', 'is_staff', 'is_superuser', 'user_permissions', 'groups')}),
)
  1. 由您自己定义:
add_fieldsets = (
    (None, {'fields': ('username', 'email', 'password1', 'password2', 'Status', 'user_image', 'last_login')}),
    ('Permissions', {'fields': ('is_admin', 'is_staff', 'is_superuser', 'user_permissions', 'groups')}),
)