25 votes

IntegrityError lors du chargement de fixture pendant les tests de django

Je charge un fixture créé avec dumpdata, et j'obtiens l'exception suivante :

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

Ceci avec un backend sqlite3.

Mise à jour : l'utilisation de touches naturelles ne fait pas de différence ici.

Qu'est-ce que cela signifie et pourquoi cela se produit-il ?

50voto

Marcin Points 25366

Apparemment, l'un des pièges pour les imprudents est qu'il faut exclure les contenttypes lors de l'exportation des fixtures. (Merci à subsume sur #django pour l'information).

Pour exclure des types de contenu, utilisez l'option -e lors de l'exécution de la commande dumpdata.

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

11voto

Furkhat Points 21
python manage.py dumpdata --exclude=contenttypes --exclude=auth.Permission > initial_data.json

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X