2017-12-06 1 views
0

사용자 가입 및 로그인 용도로 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}) 

이 설정을 사용하여 이메일과 사용자 이름을 통해 사용자 로그인을 할 수 있습니다. 그러나 문제는 수퍼 유저가 장고 관리자에서 '이메일'을 편집/제거 할 수 있다는 사실입니다. 나는 그러한 행동을 원하지 않는다. (사용자 이름을 제거하려고하면 "필드가 필요합니다"오류가 발생합니다.)

내 질문은 지금 사용자 정보를 편집하는 것을 방지하려면 어떻게해야합니까? 즉 '사용자 이름'및 '전자 메일'읽기 전용 필드를 만듭니다.

+0

당신이'User'에 대한 사용자 정의 모델 관리자가 있습니까 추가? – cezar

답변

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',) 
1

수퍼 유저는 시스템에서 가장 권한이있는 사용자입니다. 수퍼 유저는 모든 것에 절대 액세스 할 수 있습니다.

사용자가 일부 액세스 권한 만 갖기를 원할 경우 새 관리 그룹을 만들어 해당 그룹에 관리자를 추가하면됩니다. 해당 그룹에 대한 사용자 테이블을 수정하려면 오른쪽을 제거하십시오.

관련 문제