I'm using django 2.1.5. I want to override the django admin authentication process, the objective is to allow user with is_staff=False to be able to login. So, i'm trying to override the AdminSite and followed this docs (https://docs.djangoproject.com/en/2.1/ref/contrib/admin/#overriding-default-admin-site). This is the code so far:
my_app/forms.py
from django.contrib.admin.forms import AdminAuthenticationForm
class CustomAdminAuthenticationForm(AdminAuthenticationForm):
def confirm_login_allowed(self, user):
super().confirm_login_allowed(user) # i removed is_staff checking here
my_app/admin.py
class MyAdminSite(admin.AdminSite):
login_form = CustomAdminAuthenticationForm
def has_permission(self, request):
return request.user.is_active # i also removed request.user.is_staff here
my_app/apps.py
from django.contrib.admin.apps import AdminConfig
class MyAdminConfig(AdminConfig):
default_site = 'my_app.admin.MyAdminSite'
root/settings.py
INSTALLED_APPS = [
'my_app.apps.MyAdminConfig',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'my_app',
]
When i tried to runserver, there is an error:
ImportError: Module "my_app.admin" does not define a "MyAdminSite" attribute/class
I think i have point the default_site in my_app/apps.py correctly. How can i fix this? Is there any other way to complete my objective other than overriding the AdminSite? Thank you.
This seems like an awful lot of trouble instead of just assigning every user the staff role. The Django docs define the is_staff
field in User
as a boolean that "[d]esignates whether this user can access the admin site". Isn't this just what you want?
In other words: What else do you need is_staff
for that prevents you from making all your users into staff members if you want them all to be able to access the admin site?