我正在使用django-allauth进行用户注册和登录。用户可以使用用户名和电子邮件登录。
# settings.py
# Custom User Model
AUTH_USER_MODEL = 'users.User'
# ask for either username or email during login
ACCOUNT_AUTHENTICATION_METHOD = 'username_email'
# Set Email field as required during signup
ACCOUNT_EMAIL_REQUIRED = True
# Set email versification necessary before creating account
ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
# Don't ask for username while signing up.
# Users can later edit/change username in their profile.
# If username is not set, use email to log in.
ACCOUNT_USERNAME_REQUIRED = False
# Login the user after email-confirmations
ACCOUNT_LOGIN_ON_EMAIL_CONFIRMATION = True
我有一个用户应用程序,它实现了一个自定义用户模型,如图所示。
# users/models.py
class User(AbstractUser):
name = models.CharField(blank=True, max_length=255)
def __str__(self):
return self.username
def get_absolute_url(self):
return reverse('users:detail', kwargs={'username': self.username})
使用此设置,我可以通过电子邮件和用户名进行用户登录。但是,问题在于Superuser能够在Django Admin中编辑/删除“email”。我不想要这样的行为。 (尝试删除用户名会产生“需要字段”错误。)
我现在的问题是, 如何阻止管理员编辑用户信息。,即将“用户名”和“电子邮件”设为只读字段。
答案 0 :(得分:1)
嗯,超级用户是系统中最有权限的用户。 超级用户可以绝对访问所有内容,这是合乎逻辑的。
如果您希望用户只拥有部分访问权限,可以通过创建新的管理员组并将管理员添加到该组来实现。删除权限以修改该组的用户表。
答案 1 :(得分:1)
您可以为用户制作自定义模型管理员并添加readonly_fields = ('email',)
@admin.register(User)
class UserAdmin(DjangoUserAdmin):
fieldsets = (
(None, {'fields': ('email', 'password')}),
(_('Personal info'), {'fields': ('first_name', 'last_name')}),
(_('Permissions'), {'fields': ('is_active', 'is_staff', 'is_superuser','role',
'groups', 'user_permissions')}),
(_('Important dates'), {'fields': ('last_login', 'date_joined')}),
)
add_fieldsets = (
(None, {
'classes': ('wide',),
'fields': ('email', 'password1', 'password2'),
}),
)
list_display = ('email', 'first_name', 'last_name', 'is_staff')
search_fields = ('email', 'first_name', 'last_name')
ordering = ('email',)
readonly_fields = ('email',)