我正在尝试允许所有活动用户登录到管理站点,因为默认情况下,只有工作人员和超级用户才能登录到管理站点。
我尝试覆盖自定义板条箱/更改表单中的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"])```
答案 0 :(得分:1)
有两点决定用户是否可以访问Django Admin:
User.is_staff
1必须设置为True
有多种方法可以为所有新用户将is_staff
设置为True
。最简单的方法可能是在您的is_staff = models.BooleanField(default=True)
模型上重新定义User
。
如果您不打算使用每个模型的权限,还可以重新定义is_superuser = models.BooleanField(default=True)
,这将为用户提供每个模型的所有权限。
请注意,尽管Django Admin的主要设计对象是知道自己在做什么的开发人员和站点管理员,而不是大多数普通用户。