Re: While registering the user with django form, it gives "UNIQUE constraint failed: auth_user.username" error

5,249 views
Skip to first unread message
Message has been deleted

Nelson Varela

unread,
Oct 8, 2018, 10:32:03 AM10/8/18
to Django users
You do not have to save the user 2 times in your form:

user = user_form.save()
user.save()

Maybe this is also the problem...

RAJENDRA MYTHILI 17BIS0120

unread,
May 17, 2019, 12:52:30 PM5/17/19
to Django users
I'm facing the same issue ... Did you figure out what's wrong?

On Saturday, October 6, 2018 at 6:28:09 AM UTC-7, Jaydeep Borkar wrote:
When I try to register a user using Django form, it gives me "UNIQUE constraint failed: auth_user.username". When I tried registering the first user, it worked, but I couldn't see that entry in my database. When I tried registering the second user, it's giving me this error. Please, help me through this. I have spent a considerable amount of time on this and I'm stuck. 

This is my code: 

forms.py 
from django import forms
from django.contrib.auth.models import User
from volunteer.models import UserProfileInfo

class UserForm(forms.ModelForm):

    class Meta():
        model = User
        fields = ('email','first_name','last_name')




views.py 
from django.shortcuts import render
from volunteer.forms import UserForm

 

def register(request):

    registered = False

    if request.method =="POST" :
        user_form = UserForm(data=request.POST)

        if user_form.is_valid():

            user = user_form.save()
            user.save()

            registered = True

        else:
            print(user_form.errors)

    else:
        user_form = UserForm()

    return render(request, 'volunteer/volunteer.html',
                             {'user_form':user_form,
                              'registered':registered})

     
          


        



models.py 
from django.db import models
from django.contrib.auth.models import User

class UserProfileInfo(models.Model):

        user=models.OneToOneField(User)

        def __str__(self):
                return self.user.first_name
                return self.user.last_name
                return self.user.email







urls.py
from django.conf.urls import url

from . import views

app_name = 'volunteer'

urlpatterns = [

     url(r'^', views.register, name='register'),
]



admin.py
from django.contrib import admin
from volunteer.models import UserProfileInfo

# Register your models here.
admin.site.register(UserProfileInfo)



volunteer.html file which has the user form
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
 
 
<meta name="viewport" content = "width=device-width, initial-scale=1.0">

 
 
</head>  
 
<body>  

     <div class="jumbotron">
    {% if registered %}
   <h1>Thanks!</h1>
{% else %}
  <h1>Register</h1>


     <form method="post">
    {% csrf_token %}
{{ user_form.as_p }}
     <input type="submit" name="" value="Register">

     {% endif %}

     </div> 

     
     </form>

</body>
</html> 



I feel there's some problem in views.py or models.py, or volunteer.html. or maybe something else. Please, guide me through this. 
Thanks in advance. 

Guru Murthy

unread,
May 17, 2019, 12:57:07 PM5/17/19
to django...@googlegroups.com
Hi,
Your _str function name is only one name is give in that model

Regards
Gurumurthy P


--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users...@googlegroups.com.
To post to this group, send email to django...@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/c59e6938-86fd-4cfc-90ed-3053032b8e2d%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Joe Reitman

unread,
May 17, 2019, 6:31:56 PM5/17/19
to Django users
I'm not sure what your objective is but you don't need to create another model to store user data. User data is stored in the auth.models. It has fields already available for what your trying to accomplish. 

Flexian_me

unread,
Jun 4, 2019, 9:24:30 AM6/4/19
to Django users
Consider we want another attribute in user model other than what is already available, for example height or weight. Still this code is giving error and focus should be to solve the issue that OP is facing. I am also facing same issue and trying to figure it out.
@Jaydeep Did you get to solve the issue somehow?

Thanks!

Joe Reitman

unread,
Jun 5, 2019, 8:47:50 AM6/5/19
to Django users
The problem with Jaydeep's code is the 'username' field is not getting populated in the auth_user table. Django auth_user table by default must have unique usernames. Username is what Django authenticates to by default. 

Jaydeep was able to enter the initial user with email, firstname and lastname once because he left 'username' field blank. The second time failed because there is already a blank 'username' causing it to throw the Unique Constraint error. 

Also, as this code is written the 'userprofileinfo' table is not getting populated with any data.

Chandrashekhar Singh

unread,
Jun 5, 2019, 9:00:22 AM6/5/19
to django...@googlegroups.com
Better will be, delete all migrations, and again migrate

--

Chetan Ganji

unread,
Jun 5, 2019, 9:11:54 AM6/5/19
to django...@googlegroups.com
I wrote a python script to easily reset a django project. I hope it helps you.
Just put it in the folder where manage.py file is and run it.


import os
import shutil

from pprint import pprint


folders = []
base_dir = os.path.dirname(os.path.realpath(__file__))


def get_directory_list():
global folders
global base_dir

for root, d_names, f_names in os.walk(base_dir):
for name in d_names:
folders.append(os.path.join(root, name))
folders = sorted(folders)
return folders


def delete_pycache():
global folders

for folder in folders:
if folder.endswith("__pycache__"):
shutil.rmtree(folder)

print("All __pycache__ files deleted.")
return None


def delete_migrations():
global folders

for folder in folders:
if folder.endswith("migrations"):
for item in os.listdir(folder):
if not item.endswith("__init__.py"):
os.remove(os.path.join(folder, item))

print("All migration files deleted.")
return None


def delete_sqlite3():
global base_dir
db_file = os.path.join(base_dir, "default.sqlite3")
if os.path.exists(db_file):
os.remove(db_file)


def main():
global folders

try:
get_directory_list()
delete_pycache()
delete_migrations()
delete_sqlite3()
print("All operations performed successfully.")
except Exception as e:
print("There was some error")


if __name__ == "__main__":
main()


Regards,
Chetan Ganji
+91-900-483-4183


Reply all
Reply to author
Forward
0 new messages