允许所有活动用户登录Django管理站点

时间:2019-07-09 08:29:19

标签: python django authentication middleware

我正在尝试允许所有活动用户登录到管理站点,因为默认情况下,只有工作人员和超级用户才能登录到管理站点。

我尝试覆盖自定义板条箱/更改表单中的clean方法,但无济于事

class User(GuardianUserMixin, AbstractUser):

    name = models.CharField(_("Name of User"), blank=True, max_length=255)

    def get_absolute_url(self):
        return reverse("users:detail", kwargs={"username": self.username})

@admin.register(User)
class UserAdmin(GuardedModelAdminMixin, auth_admin.UserAdmin):
    form = UserChangeForm
    add_form = UserCreationForm
    fieldsets = FIELDSETS
    list_display = ["username", "name", "is_active", "is_superuser", "is_staff"]
    search_fields = ["name", "username"]

class UserChangeForm(forms.UserChangeForm):
    class Meta(forms.UserChangeForm.Meta):
        model = User


class UserCreationForm(forms.UserCreationForm):

    error_message = forms.UserCreationForm.error_messages.update(
        {"duplicate_username": _("This username has already been taken.")}
    )

    class Meta(forms.UserCreationForm.Meta):
        model = User

    def clean_username(self):
        username = self.cleaned_data["username"]

        try:
            User.objects.get(username=username)
        except User.DoesNotExist:
            return username

        raise 
    ValidationError(self.error_messages["duplicate_username"])```

1 个答案:

答案 0 :(得分:1)

有两点决定用户是否可以访问Django Admin:

  1. User.is_staff 1必须设置为True
  2. 用户将需要每种型号的适当权限

有多种方法可以为所有新用户将is_staff设置为True。最简单的方法可能是在您的is_staff = models.BooleanField(default=True)模型上重新定义User

如果您不打算使用每个模型的权限,还可以重新定义is_superuser = models.BooleanField(default=True),这将为用户提供每个模型的所有权限。

请注意,尽管Django Admin的主要设计对象是知道自己在做什么的开发人员和站点管理员,而不是大多数普通用户。