657

I am using Django (version 1.3) and have forgotten both admin username and password. How to reset both?

And is it possible to make a normal user into admin, and then remove admin status?

1
  • Please don't ask two different questions in one post. Commented Nov 25, 2020 at 13:41

24 Answers 24

1196
python manage.py changepassword <user_name>

see docs

Sign up to request clarification or add additional context in comments.

9 Comments

just realised that you said you forgot the username... 'admin' being the username in my answer wont be much help then!
@user794916 That's rather strange choice if you don't remember the username. :-)
You can change the user name from "admin" to another proper user nam. :D
django's the best. everything is just so easy
If you've forgotten the username, you can do manage.py createsuperuser to create a 2nd superuser, and then view the list of Users to find the original one. Then log in as the original one and delete the new superuser.
will this effect anything? having 2 superusers?
You can have as many superusers as you like. But be careful who gets them and try to limit the number of people with superuser accesss.
|
226
  1. python manage.py createsuperuser will create another superuser, you will be able to log into admin and rememder your username.
  2. Yes, why not.

To give a normal user privileges, open a shell with python manage.py shell and try:

from django.contrib.auth.models import User
user = User.objects.get(username='normaluser')
user.is_superuser = True
user.save()

3 Comments

If its possible , how to do it ?
With this approach seems that the user can't access django admin
@LucaFabbri you would also need to set user.is_staff = True
179

You may try through console:

python manage.py shell

then use following script in shell

from django.contrib.auth.models import User
User.objects.filter(is_superuser=True)

will list you all super users on the system. if you recognize yur username from the list:

usr = User.objects.get(username='your username')
usr.set_password('raw password')
usr.save()

and you set a new password (:

3 Comments

User.objects.filter(is_superuser=True)
pip install django-extensions, add it to installed apps and run ./manage.py shell_plus. The User class will be available and you can password-change.
This method allows user to set any password, without any validation. You can thus set a very simple password (just for test purposes), which the accepted answer method does not allow.
30

In addition to @JamesO answer that states using

python manage.py changepassword [username]

if you don't remember your username :

1- while in your project's main directory access the database (I'm using sqlite3):

sqlite3 db.sqlite3

2- list the content of the auth_user table

SELECT * FROM auth_user ;

3- look for the user that has is_superuser = 1 , in my case it's admin screenshot of the command output (I don't have enough rep points)

Comments

26

You can create a new superuser with createsuperuser command.

Comments

18

This is very good question.

python manage.py changepassword user_name

Example :-

python manage.py changepassword mickey

Comments

16

One of the best ways to retrieve the username and password is to view and update them. The User Model provides a perfect way to do so.

In this case, I'm using Django 1.9

  1. Navigate to your root directory i,e. where you "manage.py" file is located using your console or other application such as Git.

  2. Retrieve the Python shell using the command "python manage.py shell".

  3. Import the User Model by typing the following command "from django.contrib.auth.models import User"

  4. Get all the users by typing the following command "users = User.objects.all()"

  5. Print a list of the users For Python 2 users use the command "print users" For Python 3 users use the command "print(users)" The first user is usually the admin.

  6. Select the user you wish to change their password e.g.

    "user = users[0]"

  7. Set the password

    user.set_password('name_of_the_new_password_for_user_selected')

  8. Save the new password

    "user.save()"

Start the server and log in using the username and the updated password.

2 Comments

The advantage of this method over manage.py changepassword is that you're not restricted to what passwords you can or can't use - no more too similar to username crap. (This is in my dev environment. I'm not advocating weaker passwords. You should always use strong passwords in prod.)
This should be the top answer
13

new setup should first run python manage.py createsuperuser to create user. It seems like there is no default username password to login into admin.

Comments

13
python manage.py changepassword username

Comments

12

Two ways to do this:

The changepassword management command:

(env) $ python manage.py changepassword <username>

Or (which expands upon a few answers, but works for any extended User model) using the django-admin shell as follows:

(env) $ python manage.py shell

This should bring up the shell command prompt as follows:

Python 3.7.2 (default, Mar 27 2019, 08:44:46) 
[GCC 6.3.0 20170516] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>>

Then you would want the following:

>>> from django.contrib.auth import get_user_model
>>> User = get_user_model()
>>> user = User.objects.get(username='[email protected]')
>>> user.set_password('new password')
>>> user.save()
>>> exit()

N.B. Why have I answered this question with this answer?

Because, as mentioned, User = get_user_model() will work for your own custom User models. Using from django.contrib.auth.models import User then User.objects.get(username='username') may throw the following error:

AttributeError: Manager isn't available; 'auth.User' has been swapped for 'users.User'

1 Comment

This answer is a good way to set a common/short password for an existing user.
7

You may try this:

1.Change Superuser password without console

python manage.py changepassword <username>

2.Change Superuser password through console

enter image description here enter image description here

1 Comment

Using screenshots instead of written code is very bad practice. Poeple can not Copy-Paste your code to test and it is not available for in-site-search
6

If you're using custom user model

(venv)your_prj $ ./manage.py shell
>>> from customusers.models import CustomUser
>>> CustomUser.objects.filter(is_superuser=True)
>>> user = CustomUser.objects.get(email="[email protected]")
>>> user.set_password('@NewPwd')
>>> user.save()
>>> exit()

Comments

5

You may also have answered a setup question wrong and have zero staff members. In which case head to postgres:

obvioustest=# \c [yourdatabasename]
obvioustest=# \x
obvioustest=# select * from auth_user;
-[ RECORD 1 ]+-------------
id           | 1
is_superuser | f
is_staff     | f
...

To fix, edit directly:

update auth_user set is_staff='true' where id=1;

Comments

5

If you forgot create admin user first build one with createsuperuser command on manage.py then change the password.

Comments

5

if you forget your admin then you need to create new user by using

python manage.py createsuperuser <username>

and for password there is CLI command changepassword for django to change user password

python manage.py changepassword <username>

OR

django-admin changepassword <username>

OR Run this code in Django env

from django.contrib.auth.models import User
u = User.objects.get(username='john')
u.set_password('new password')
u.save()

Comments

3

In case you do not know the usernames as created here. You can get the users as described by @FallenAngel above.

python manage.py shell 
from django.contrib.auth.models import User
usrs = User.objects.filter(is_superuser=True)
#identify the user
your_user = usrs.filter(username="yourusername")[0]
#youruser = usrs.get(username="yourusername")
#then set the password

However in the event that you created your independent user model. A simple case is when you want to use email as a username instead of the default user name. In which case your user model lives somewhere such as your_accounts_app.models then the above solution wont work. In this case you can instead use the get_user_model method

from django.contrib.auth import get_user_model 
super_users = get_user_model().objects.filter(is_superuser=True)
#proceed to get identify your user
# and set their user password

Comments

2

Another thing that is worth noting is to set your user's status is_staff as active. At least, that's what makes it works for me. For more detail, I created another superuser as people explained above. Then I go to the database table auth_user and search for that username to make sure its is_staff flag is set to 1. That finally allowed me to log into admin site.

Comments

2

Create a new superuser with the command "python manage.py createsuperuser". Login as the new super user. Click on the 'users' link. Then click on the user you want to delete. click on delete user at the end of the form page.

Note - The above process will make changes to the activity logs done by that particular user.

Comments

1

The best way is to just go to your terminal and type

python manage.py createsuperuser

and insert another password and user name again but u will lost some of your profile that u have created before in most cases.

1 Comment

Please don't follow this solution.
1

Just type this command in your command line:

python manage.py changepassword yourusername

Comments

0

use

python manage.py dumpdata

then look at the end you will find the user name

1 Comment

The dump may contain user name but password is hashed with a one-way hash function, which should not be (and is not) useful for restoring the password. Also, it is unnecessary to dump the database for browsing when the user has access to the running database and can connect to it with a proper client.
0

I think,The better way At the command line

python manage.py createsuperuser

Comments

0

If a reset_password link is needed in the /admin/ website this is the way to go: https://docs.djangoproject.com/en/3.2/ref/contrib/admin/#adding-a-password-reset-feature

Comments

-4

Another way to get the user name (and most of the information) is to access the database directly and read the info from the tables.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.