【问题标题】:Django admin error "Please correct the errors below."Django 管理员错误“请更正以下错误。”
【发布时间】:2018-12-05 09:07:36
【问题描述】:

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

模型.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-admin django-custom-user django-custom-manager


    【解决方案1】:

    我可以建议如何尝试找出问题所在。通常,您的UserAdmin 将引用表单,见下文:

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

    您可以使用日志记录找出导致错误的原因。将以下 Mixin 添加到您的 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):
        ....
    
    

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

    【讨论】:

      【解决方案2】:

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

      问题在于您的add_fieldsets。 Django 使用他自己的模式来添加新用户(您可以在django.contrib.auth.admin.py 文件中的UserAdmin 模型中查看它)。您需要为password1password2 定义字段。

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

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

      这里有 2 个选项:
      附言在任何情况下,您都需要定义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')}),
      )
      

      【讨论】:

        猜你喜欢
        • 2019-11-21
        • 2021-12-11
        • 1970-01-01
        • 2018-04-24
        • 2013-07-20
        • 2013-05-29
        • 2013-01-25
        • 1970-01-01
        • 2020-10-25
        相关资源
        最近更新 更多