2010-09-28 28 views
6

I utiliza los siguientes comandos para generar 2 accesorios:Problema al cargar Django accesorio: IntegrityError: (1062, "entrada Duplicar '4' de 'user_id' llave")

./manage.py dumpdata --format=json --indent=4 --natural auth.User > fixtures/user.json 
./manage.py dumpdata --format=json --indent=4 --natural --exclude=contenttypes --exclude=auth > fixtures/full.json 

Tengo el siguiente accesorio user.json llamado:

[ 
    { 
     "pk": 4, 
     "model": "auth.user", 
     "fields": { 
      "username": "foo", 
      "first_name": "Se\u00e1n", 
      "last_name": "Hayes", 
      "is_active": true, 
      "is_superuser": true, 
      "is_staff": true, 
      "last_login": "2010-09-27 21:57:45", 
      "groups": [], 
      "user_permissions": [], 
      "password": "!", 
      "email": "[email protected]", 
      "date_joined": "2010-09-27 21:57:45" 
     } 
    } 
] 

y el accesorio full.json siguiente nombre:

[ 
    { 
     "pk": "72a75887b4a0ce06a61f9183fe1c0e15", 
     "model": "sessions.session", 
     "fields": { 
      "expire_date": "2010-10-11 21:57:45", 
      "session_data": "gAJ9cQEoVRJfYXV0aF91c2VyX2JhY2tlbmRxAlUOZmIuYXV0aC5GYkF1dGhxA1UNX2F1dGhfdXNl\ncl9pZHEEigEEdS5hOGZlODU0MmRjYmUwNmEzODIwNjhiYzYyODc2MWQxZA==\n" 
     } 
    }, 
    { 
     "pk": 1, 
     "model": "sites.site", 
     "fields": { 
      "domain": "example.com", 
      "name": "example.com" 
     } 
    }, 
    { 
     "pk": 2, 
     "model": "common.userprofile", 
     "fields": { 
      "money": 10, 
      "energy": 10, 
      "experience": 0, 
      "stamina": 10, 
      "health": 10, 
      "user": 4 
     } 
    }, 
    { 
     "pk": 2, 
     "model": "missions.missionprofile", 
     "fields": { 
      "user": 4, 
      "last_area_viewed": null 
     } 
    }, 
    { 
     "pk": 1, 
     "model": "fb.facebookuser", 
     "fields": { 
      "updated": "2010-09-27 21:57:45", 
      "uid": "24411841", 
      "created": "2010-09-27 21:57:45", 
      "access_token": "foo", 
      "url": "http://www.facebook.com/profile.php?id=24411841", 
      "user": 4, 
      "img_url": null, 
      "name": "Se\u00e1n Hayes" 
     } 
    } 
] 

ejecutando los siguientes comandos (en cualquier orden):

./manage.py loaddata user 
./manage.py loaddata full 

plantea la siguiente excepción:

Problem installing fixture '/projectpath/fixtures/full.json': Traceback (most recent call last): 
    File "/usr/lib/pymodules/python2.6/django/core/management/commands/loaddata.py", line 169, in handle 
    obj.save(using=using) 
    File "/usr/lib/pymodules/python2.6/django/core/serializers/base.py", line 165, in save 
    models.Model.save_base(self.object, using=using, raw=True) 
    File "/usr/lib/pymodules/python2.6/django/db/models/base.py", line 528, in save_base 
    result = manager._insert(values, return_id=update_pk, using=using) 
    File "/usr/lib/pymodules/python2.6/django/db/models/manager.py", line 195, in _insert 
    return insert_query(self.model, values, **kwargs) 
    File "/usr/lib/pymodules/python2.6/django/db/models/query.py", line 1479, in insert_query 
    return query.get_compiler(using=using).execute_sql(return_id) 
    File "/usr/lib/pymodules/python2.6/django/db/models/sql/compiler.py", line 783, in execute_sql 
    cursor = super(SQLInsertCompiler, self).execute_sql(None) 
    File "/usr/lib/pymodules/python2.6/django/db/models/sql/compiler.py", line 727, in execute_sql 
    cursor.execute(sql, params) 
    File "/usr/lib/pymodules/python2.6/django/db/backends/util.py", line 15, in execute 
    return self.cursor.execute(sql, params) 
    File "/usr/lib/pymodules/python2.6/django/db/backends/mysql/base.py", line 86, in execute 
    return self.cursor.execute(query, args) 
    File "/usr/lib/pymodules/python2.6/MySQLdb/cursors.py", line 166, in execute 
    self.errorhandler(self, exc, value) 
    File "/usr/lib/pymodules/python2.6/MySQLdb/connections.py", line 35, in defaulterrorhandler 
    raise errorclass, errorvalue 
IntegrityError: (1062, "Duplicate entry '4' for key 'user_id'") 

¿Alguna idea sobre lo que está pasando? Soy consciente de que hay un problema con las referencias avanzadas en MySQL, pero eso no debería importar si el objeto Usuario con ID 4 se está instalando antes de los dispositivos que contienen una clave externa, ¿no?

+0

también probé división full.json en luminarias más pequeñas y los instalé uno a la vez. Tan pronto como aparece una clave externa al Usuario, se genera el error. –

+0

¿Puedes publicar el código de tus modelos aquí? –

+1

¿Tiene alguna configuración '' unique'' establecida en sus modelos? –

Respuesta

15

De acuerdo con el comentario de Ashok, cuando tuve el mismo problema, que fue resuelto por cambiar mi manejador de señales para comprobar si se está ejecutando en el modo de "cruda", que aparentemente significa un fijo es que se carga:

def create_user_profile(sender, instance, created, **kwargs): 
    if created and not kwargs.get('raw', False): 
     UserProfile.objects.create(user=instance) 

Ver How do I prevent fixtures from conflicting with django post_save signal code?

0

El accesorio estático de Django es un ANTI-PATRÓN, esa es la razón por la que tiene este tipo de problema. Le sugiero que use alguna biblioteca que genere estos accesorios para usted, incluida la identificación de forma natural.

que sugieren que Dynamic Dynamic Fixture

Cuestiones relacionadas