2012-03-13 17 views
6

EDIT1: Intenté hacer sqlflush para restablecer todo, pero eso no ayudó.¿Cómo arreglo IntegrityError con el modelo UserProfile (cuando el usuario creó desde la interfaz de administración)?

EDIT2: Puedo crear un usuario y especificar OtherModel como NULL, y luego editar el usuario más tarde para hacer othermodel una referencia real. El problema ocurre cuando especifico una referencia durante la creación del usuario.

Por lo tanto, en mi aplicación, que está conectada con postgres, estoy tratando de ampliar el modelo de usuario que django proporciona con un nuevo modelo llamado Perfil de usuario. Quiero que cada usuario se asocie con otro modelo que creé. Así que aquí está mi código:

models.py

. 
. 
. 

class OtherModel(models.Model): 
    # model info 

class UserProfile(models.Model): 
    user = models.OneToOneField(User)  
    othermodel = models.OneToOneField(OtherModel, null=True) 

def create_user_profile(sender, instance, created, **kwargs): 
    if created: 
     profile, created = UserProfile.objects.get_or_create(user=instance) 

post_save.connect(create_user_profile, sender=User) 

Cuando creo un usuario desde la interfaz de administración de Django, me sale el siguiente error:

IntegrityError at /admin/auth/user/add/ 
duplicate key value violates unique constraint "planamocal_userprofile_user_id_key" 
DETAIL: Key (user_id)=(23) already exists. 

cada vez que intento hacer un nuevo usuario, el recuento de user_id sigue incrementándose, lo cual es extraño porque el recuento real de usuarios sigue siendo el mismo.

Aquí está la traza inversa:

Environment: 


Request Method: POST 
Request URL: http://127.0.0.1:8000/admin/auth/user/add/ 

Django Version: 1.3.1 
Python Version: 2.7.1 
Installed Applications: 
['django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.sites', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'planamocal', 
'django.contrib.admin'] 
Installed Middleware: 
('django.middleware.common.CommonMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware') 


Traceback: 
File "/Users/AndyFang/Desktop/planamo/venv/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 
    111.       response = callback(request, *callback_args, **callback_kwargs) 
File "/Users/AndyFang/Desktop/planamo/venv/lib/python2.7/site-packages/django/contrib/admin/options.py" in wrapper 
    307.     return self.admin_site.admin_view(view)(*args, **kwargs) 
File "/Users/AndyFang/Desktop/planamo/venv/lib/python2.7/site-packages/django/utils/decorators.py" in _wrapped_view 
    93.      response = view_func(request, *args, **kwargs) 
File "/Users/AndyFang/Desktop/planamo/venv/lib/python2.7/site-packages/django/views/decorators/cache.py" in _wrapped_view_func 
    79.   response = view_func(request, *args, **kwargs) 
File "/Users/AndyFang/Desktop/planamo/venv/lib/python2.7/site-packages/django/contrib/admin/sites.py" in inner 
    197.    return view(request, *args, **kwargs) 
File "/Users/AndyFang/Desktop/planamo/venv/lib/python2.7/site-packages/django/utils/decorators.py" in _wrapper 
    28.    return bound_func(*args, **kwargs) 
File "/Users/AndyFang/Desktop/planamo/venv/lib/python2.7/site-packages/django/utils/decorators.py" in _wrapped_view 
    93.      response = view_func(request, *args, **kwargs) 
File "/Users/AndyFang/Desktop/planamo/venv/lib/python2.7/site-packages/django/utils/decorators.py" in bound_func 
    24.     return func(self, *args2, **kwargs2) 
File "/Users/AndyFang/Desktop/planamo/venv/lib/python2.7/site-packages/django/db/transaction.py" in inner 
    217.     res = func(*args, **kwargs) 
File "/Users/AndyFang/Desktop/planamo/venv/lib/python2.7/site-packages/django/contrib/auth/admin.py" in add_view 
    103.   return super(UserAdmin, self).add_view(request, form_url, extra_context) 
File "/Users/AndyFang/Desktop/planamo/venv/lib/python2.7/site-packages/django/utils/decorators.py" in _wrapper 
    28.    return bound_func(*args, **kwargs) 
File "/Users/AndyFang/Desktop/planamo/venv/lib/python2.7/site-packages/django/utils/decorators.py" in _wrapped_view 
    93.      response = view_func(request, *args, **kwargs) 
File "/Users/AndyFang/Desktop/planamo/venv/lib/python2.7/site-packages/django/utils/decorators.py" in bound_func 
    24.     return func(self, *args2, **kwargs2) 
File "/Users/AndyFang/Desktop/planamo/venv/lib/python2.7/site-packages/django/db/transaction.py" in inner 
    217.     res = func(*args, **kwargs) 
File "/Users/AndyFang/Desktop/planamo/venv/lib/python2.7/site-packages/django/contrib/admin/options.py" in add_view 
    885.      self.save_formset(request, form, formset, change=False) 
File "/Users/AndyFang/Desktop/planamo/venv/lib/python2.7/site-packages/django/contrib/admin/options.py" in save_formset 
    677.   formset.save() 
File "/Users/AndyFang/Desktop/planamo/venv/lib/python2.7/site-packages/django/forms/models.py" in save 
    482.   return self.save_existing_objects(commit) + self.save_new_objects(commit) 
File "/Users/AndyFang/Desktop/planamo/venv/lib/python2.7/site-packages/django/forms/models.py" in save_new_objects 
    613.    self.new_objects.append(self.save_new(form, commit=commit)) 
File "/Users/AndyFang/Desktop/planamo/venv/lib/python2.7/site-packages/django/forms/models.py" in save_new 
    717.    obj.save() 
File "/Users/AndyFang/Desktop/planamo/venv/lib/python2.7/site-packages/django/db/models/base.py" in save 
    460.   self.save_base(using=using, force_insert=force_insert, force_update=force_update) 
File "/Users/AndyFang/Desktop/planamo/venv/lib/python2.7/site-packages/django/db/models/base.py" in save_base 
    553.      result = manager._insert(values, return_id=update_pk, using=using) 
File "/Users/AndyFang/Desktop/planamo/venv/lib/python2.7/site-packages/django/db/models/manager.py" in _insert 
    195.   return insert_query(self.model, values, **kwargs) 
File "/Users/AndyFang/Desktop/planamo/venv/lib/python2.7/site-packages/django/db/models/query.py" in insert_query 
    1436.  return query.get_compiler(using=using).execute_sql(return_id) 
File "/Users/AndyFang/Desktop/planamo/venv/lib/python2.7/site-packages/django/db/models/sql/compiler.py" in execute_sql 
    791.   cursor = super(SQLInsertCompiler, self).execute_sql(None) 
File "/Users/AndyFang/Desktop/planamo/venv/lib/python2.7/site-packages/django/db/models/sql/compiler.py" in execute_sql 
    735.   cursor.execute(sql, params) 
File "/Users/AndyFang/Desktop/planamo/venv/lib/python2.7/site-packages/django/db/backends/util.py" in execute 
    34.    return self.cursor.execute(sql, params) 
File "/Users/AndyFang/Desktop/planamo/venv/lib/python2.7/site-packages/django/db/backends/postgresql_psycopg2/base.py" in execute 
    44.    return self.cursor.execute(query, args) 

Exception Type: IntegrityError at /admin/auth/user/add/ 
Exception Value: duplicate key value violates unique constraint "planamocal_userprofile_user_id_key" 
DETAIL: Key (user_id)=(23) already exists. 

Cómo corregir este error?

Respuesta

6

El problema ocurre porque parece que está intentando crear un perfil de usuario y agregar el otro modelo simultáneamente en el administrador.

Dado que el otro modelo es una señal conectada a la creación del usuario, por lo tanto, es imposible.

cambiar el flujo de trabajo de tal manera que se crea el usuario, guardar el usuario, crear el perfil, guardar el perfil y añadir otro modelo, guardar el perfil (en este orden)

+0

¿Hay alguna forma para mí ser capaz de crear una usuario con un perfil poblado en la interfaz de administración? – fangsterr

Cuestiones relacionadas