I am doing a blog project, I have made the user registration and login to be done through email, instead of using username. When I went to create the superuser to access admin, I get the following error in terminal. For the database I have connected it with PostgreSQL.
Error:
(venv) PS C:\Users\RCA\Documents\Programar\Proyectos\blog_project> py manage.py createsuperuser Email: [email protected] Password: Password (again): This password is entirely numeric. Bypass password validation and create user anyway? [y/N]: y Traceback (most recent call last): File "C:Users\RCA\Documents\Programar\Proyectos\blog_project\venv\Lib\site-packages\django\db\backends\utils.py", line 105, in _execute return self.cursor.execute(sql, params) psycopg2.errors.UniqueViolation: llave duplicada viola restricción de unicidad «accounts_customuser_username_key» DETAIL: Ya existe la llave (username)=().
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "C:\Users\RCA\Documents\Programar\Proyectos\blog_project\manage.py", line 22, in <module>
main()
File "C:\Users\RCA\Documents\Programar\Proyectos\blog_project\manage.py", line 18, in main
execute_from_command_line(sys.argv)
File "C:\Users\RCA\Documents\Programar\Proyectos\blog_project\venv\Lib\site-packages\django\core\management\__init__.py", line 442, in execute_from_command_line
utility.execute()
File "C:\Users\RCA\Documents\Programar\Proyectos\blog_project\venv\Lib\site-packages\django\core\management\__init__.py", line 436, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "C:\Users\RCA\Documents\Programar\Proyectos\blog_project\venv\Lib\site-packages\django\core\management\base.py", line 413, in run_from_argv
self.execute(*args, **cmd_options)
File "C:\Users\RCA\Documents\Programar\Proyectos\blog_project\venv\Lib\site-packages\django\contrib\auth\management\commands\createsuperuser.py", line 89, in execute
return super().execute(*args, **options)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\RCA\Documents\Programar\Proyectos\blog_project\venv\Lib\site-packages\django\core\management\base.py", line 459, in execute
output = self.handle(*args, **options)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\RCA\Documents\Programar\Proyectos\blog_project\venv\Lib\site-packages\django\contrib\auth\management\commands\createsuperuser.py", line 238, in handle
self.UserModel._default_manager.db_manager(database).create_superuser(
File "C:\Users\RCA\Documents\Programar\Proyectos\blog_project\accounts\models.py", line 22, in create_superuser
user = self.create_user(
^^^^^^^^^^^^^^^^^
File "C:\Users\RCA\Documents\Programar\Proyectos\blog_project\accounts\models.py", line 18, in create_user
user.save(using=self._db)
File "C:\Users\RCA\Documents\Programar\Proyectos\blog_project\venv\Lib\site-packages\django\contrib\auth\base_user.py", line 78, in save
super().save(*args, **kwargs)
File "C:\Users\RCA\Documents\Programar\Proyectos\blog_project\venv\Lib\site-packages\django\db\models\base.py", line 822, in save
self.save_base(
File "C:\Users\RCA\Documents\Programar\Proyectos\blog_project\venv\Lib\site-packages\django\db\models\base.py", line 909, in save_base
updated = self._save_table(
^^^^^^^^^^^^^^^^^
File "C:\Users\RCA\Documents\Programar\Proyectos\blog_project\venv\Lib\site-packages\django\db\models\base.py", line 1067, in _save_table
results = self._do_insert(
^^^^^^^^^^^^^^^^
File "C:\Users\RCA\Documents\Programar\Proyectos\blog_project\venv\Lib\site-packages\django\db\models\base.py", line 1108, in _do_insert
return manager._insert(
^^^^^^^^^^^^^^^^
File "C:\Users\RCA\Documents\Programar\Proyectos\blog_project\venv\Lib\site-packages\django\db\models\manager.py", line 87, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\RCA\Documents\Programar\Proyectos\blog_project\venv\Lib\site-packages\django\db\models\query.py", line 1847, in _insert
return query.get_compiler(using=using).execute_sql(returning_fields)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\RCA\Documents\Programar\Proyectos\blog_project\venv\Lib\site-packages\django\db\models\sql\compiler.py", line 1823, in execute_sql
cursor.execute(sql, params)
File "C:\Users\RCA\Documents\Programar\Proyectos\blog_project\venv\Lib\site-packages\django\db\backends\utils.py", line 122, in execute
return super().execute(sql, params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\RCA\Documents\Programar\Proyectos\blog_project\venv\Lib\site-packages\django\db\backends\utils.py", line 79, in execute
return self._execute_with_wrappers(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\RCA\Documents\Programar\Proyectos\blog_project\venv\Lib\site-packages\django\db\backends\utils.py", line 92, in _execute_with_wrappers
return executor(sql, params, many, context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\RCA\Documents\Programar\Proyectos\blog_project\venv\Lib\site-packages\django\db\backends\utils.py", line 100, in _execute
with self.db.wrap_database_errors:
File "C:\Users\RCA\Documents\Programar\Proyectos\blog_project\venv\Lib\site-packages\django\db\utils.py", line 91, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File "C:\Users\RCA\Documents\Programar\Proyectos\blog_project\venv\Lib\site-packages\django\db\backends\utils.py", line 105, in _execute
return self.cursor.execute(sql, params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
django.db.utils.IntegrityError: llave duplicada viola restricción de unicidad «accounts_customuser_username_key»
DETAIL: Ya existe la llave (username)=().
My models.py:
class CustomUserManager(BaseUserManager):
def create_user(self, email, password=None):
if not email:
raise ValueError('Users must have an email address')
user = self.model(
email=self.normalize_email(email),
)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, email, password):
user = self.create_user(
email=self.normalize_email(email),
password=password,
)
user.is_admin = True
user.is_staff = True
user.is_superuser = True
user.save(using=self._db)
return user
class CustomUser(AbstractUser):
email = models.EmailField(unique=True)
is_staff = models.BooleanField(default=False)
objects = CustomUserManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
def __str__(self):
return self.email
My forms.py
from django import forms
from django.contrib.auth.forms import UserCreationForm
from .models import CustomUser
class RegisterForm(UserCreationForm):
"""
Form for registering a new user.
"""
email = forms.EmailField(max_length=254, help_text='Required. Inform a valid email address.')
first_name = forms.CharField(max_length=30, required=False, help_text='Optional.')
last_name = forms.CharField(max_length=30, required=False, help_text='Optional.')
country = forms.CharField(max_length=30, required=False, help_text='Optional.')
username = forms.CharField(max_length=30, required=True)
class Meta:
model = CustomUser
fields = ['email', 'password1', 'password2', 'first_name', 'last_name', 'username', 'country']
My views.py
from django.contrib.auth import login
from django.contrib.messages.views import SuccessMessageMixin
from django.views.generic import CreateView
from django.contrib.auth.views import LoginView
from django.urls import reverse_lazy
from .forms import RegisterForm
from .models import CustomUser
class RegisterView(SuccessMessageMixin, CreateView):
"""
View for the registration of a new user.
"""
form_class = RegisterForm
template_name = 'accounts/register.html'
success_url = reverse_lazy('login')
success_message = 'Account created successfully.'
redirect_authenticated_user = True
def form_valid(self, form):
user = form.save()
if user is not None:
login(self.request, user)
return super(RegisterView, self).form_valid(form)
class LoginView(SuccessMessageMixin, LoginView):
"""
View for the login of an existing user.
"""
model = CustomUser
template_name = 'accounts/login.html'
success_message = 'Login successful.'
redirect_authenticated_user = True
def get_success_url(self):
return reverse_lazy('blog_app:home')
def form_valid(self, form):
login(self.request, form.get_user())
return super(LoginView, self).form_valid(form)
Can someone help me with this problem? Sorry if I am not able to express better my mistake, I am new to Django and I don't understand very well how it works.
I hope you can guide me to solve this problem and to understand it so that I can solve it. Also to know if it is a problem with Django and the database configuration or if it has to do with PostgreSQL.