2011-06-22 11 views
24

Estoy cargando un accesorio creado con dumpdata, y conseguir la siguiente excepción:IntegrityError al cargar accesorio durante las pruebas de Django

Problem installing fixture 'db_dump.json': Traceback (most recent call last): 
    File "/usr/lib/python2.6/site-packages/django/core/management/commands/loaddata.py", line 174, in handle 
    obj.save(using=using) 
    File "/usr/lib/python2.6/site-packages/django/core/serializers/base.py", line 165, in save 
    models.Model.save_base(self.object, using=using, raw=True) 
    File "/usr/lib/python2.6/site-packages/django/db/models/base.py", line 526, in save_base 
    rows = manager.using(using).filter(pk=pk_val)._update(values) 
    File "/usr/lib/python2.6/site-packages/django/db/models/query.py", line 491, in _update 
    return query.get_compiler(self.db).execute_sql(None) 
    File "/usr/lib/python2.6/site-packages/django/db/models/sql/compiler.py", line 869, in execute_sql 
    cursor = super(SQLUpdateCompiler, self).execute_sql(result_type) 
    File "/usr/lib/python2.6/site-packages/django/db/models/sql/compiler.py", line 735, in execute_sql 
    cursor.execute(sql, params) 
    File "/usr/lib/python2.6/site-packages/django/db/backends/sqlite3/base.py", line 234, in execute 
    return Database.Cursor.execute(self, query, params) 
IntegrityError: columns app_label, model are not unique 

Esto es con un backend sqlite3.

Actualización: El uso de las teclas naturales no hace la diferencia aquí.

¿Qué significa y por qué está sucediendo?

Respuesta

47

Aparentemente, una de las trampas para los incautos es que se deben excluir los tipos de contenido al exportar accesorios. (Gracias a subsume en #django para la información).

Para excluir los tipos de contenido, utilice la opción -e al ejecutar el comando dumpdata.

$./manage.py dumpdata -e contenttypes > initial_data.json 
+1

Sí, ha sido golpeado por la que uno un par de veces, aunque sólo al migrar DBS dev de un motor a otro. Una regla general para los accesorios de prueba es que usted debe saber * exactamente * qué hay en ellos, para que sepa qué está pasando en sus pruebas, para que no tenga sorpresas. – eternicode

+7

Algo así me funcionó (solo como referencia): ./manage.py dumpdata -e contenttypes> initial_data.json. –

+1

gracias ahorrado mucho – soField

9
python manage.py dumpdata --exclude=contenttypes --exclude=auth.Permission > initial_data.json 
Cuestiones relacionadas