136👍
There’s no built in command but you can easily do this from the shell:
> python manage.py shell
$ from django.contrib.auth.models import User
$ User.objects.get(username="joebloggs", is_superuser=True).delete()
7👍
In the case of a custom user model it would be:
python manage.py shell
from django.contrib.auth import get_user_model
model = get_user_model()
model.objects.get(username="superjoe", is_superuser=True).delete()
- [Django]-How to set environment variables in PyCharm?
- [Django]-What is pip install -q -e . for in this Travis-CI build tutorial?
- [Django]-Django 1.5 – How to use variables inside static tag
4👍
An answer for people who did not use Django’s User model instead substituted a Django custom user model.
class ManagerialUser(BaseUserManager):
""" This is a manager to perform duties such as CRUD(Create, Read,
Update, Delete) """
def create_user(self, email, name, password=None):
""" This creates a admin user object """
if not email:
raise ValueError("It is mandatory to require an email!")
if not name:
raise ValueError("Please provide a name:")
email = self.normalize_email(email=email)
user = self.model(email=email, name=name)
""" This will allow us to store our password in our database
as a hash """
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, email, name, password):
""" This creates a superuser for our Django admin interface"""
user = self.create_user(email, name, password)
user.is_superuser = True
user.is_staff = True
user.save(using=self._db)
return user
class TheUserProfile(AbstractBaseUser, PermissionsMixin):
""" This represents a admin User in the system and gives specific permissions
to this class. This class wont have staff permissions """
# We do not want any email to be the same in the database.
email = models.EmailField(max_length=255, unique=True)
name = models.CharField(max_length=255)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['name',]
# CLASS POINTER FOR CLASS MANAGER
objects = ManagerialUser()
def get_full_name(self):
""" This function returns a users full name """
return self.name
def get_short_name(self):
""" This will return a short name or nickname of the admin user
in the system. """
return self.name
def __str__(self):
""" A dunder string method so we can see a email and or
name in the database """
return self.name + ' ' + self.email
Now to delete a registered SUPERUSER
in our system:
python3 manage.py shell
>>>(InteractiveConsole)
>>>from yourapp.models import TheUserProfile
>>>TheUserProfile.objects.all(email="The email you are looking for", is_superuser=True).delete()
- [Django]-POST jQuery array to Django
- [Django]-Removing 'Sites' from Django admin page
- [Django]-Django Queryset with filtering on reverse foreign key
4👍
No need to delete superuser…just create another superuser… You can create another superuser with same name as the previous one.
I have forgotten the password of the superuser so I create another superuser with the same name as previously.
- [Django]-Django models: mutual references between two classes and impossibility to use forward declaration in python
- [Django]-Django auto_now and auto_now_add
- [Django]-Django: Display Choice Value
2👍
Here’s a simple custom management command, to add in myapp/management/commands/deletesuperuser.py
:
from django.contrib.auth.models import User
from django.core.management.base import BaseCommand
from django.core.management.base import CommandError
class Command(BaseCommand):
def add_arguments(self, parser):
parser.add_argument('username', type=str)
def handle(self, *args, **options):
try:
user = User.objects.get(username=options['username'], is_superuser=True)
except User.DoesNotExist:
raise CommandError("There is no superuser named {}".format(options['username']))
self.stdout.write("-------------------")
self.stdout.write("Deleting superuser {}".format(options.get('username')))
user.delete()
self.stdout.write("Done.")
https://docs.djangoproject.com/en/2.0/howto/custom-management-commands/#accepting-optional-arguments
- [Django]-How do I get the object if it exists, or None if it does not exist in Django?
- [Django]-Change a Django form field to a hidden field
- [Django]-Creating my own context processor in django
1👍
A variation from @Timmy O’Mahony answer is to use the shell_plus
(from django_extensions
) to identify your User model automatically.
python manage.py shell_plus
User.objects.get(
username="joebloggs",
is_superuser=True
).delete()
If the user email is unique, you can delete the user by email too.
User.objects.get(
email="joebloggs@email.com",
is_superuser=True
).delete()
- [Django]-List field in model?
- [Django]-Pulling data to the template from an external database with django
- [Django]-Virtualenv and source version control
-2👍
There is no way to delete it from the Terminal (unfortunately), but you can delete it directly. Just log into the admin page, click on the user you want to delete, scroll down to the bottom and press delete.
- [Django]-Pulling data to the template from an external database with django
- [Django]-Get model's fields in Django
- [Django]-Set up a scheduled job?