2011-06-22 20 views
24

mam ładowania urządzenie stworzone z dumpdata i otrzymuję następujący wyjątek:IntegrityError podczas ładowania urządzenie podczas testów 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 

To jest z sqlite3 backend.

Aktualizacja: używanie naturalnych klawiszy nie ma tutaj znaczenia.

Co to znaczy i dlaczego to się dzieje?

Odpowiedz

47

Najwyraźniej jedną z pułapek dla nieostrożnych jest to, że należy wykluczyć typy zawartości podczas eksportowania urządzeń. (Dzięki zasubskrybowaniu #django dla informacji).

Aby wykluczyć typy zawartości, należy użyć opcji -e podczas uruchamiania polecenia dumpdata.

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

Tak, został trafiony przez ten jeden kilka razy, ale tylko podczas migracji DBS dev z jednego silnika do drugiego. Ogólną zasadą dla testów jest to, że powinieneś dokładnie wiedzieć * co jest w nich, więc wiesz, co dzieje się w twoich testach, więc nie masz żadnych niespodzianek. – eternicode

+7

Coś w tym stylu działało dla mnie (tylko w celu uzyskania dalszych informacji): ./manage.py dumpdata -e contenttypes> initial_data.json. –

+1

dzięki bardzo dużo zaoszczędzono – soField

9
python manage.py dumpdata --exclude=contenttypes --exclude=auth.Permission > initial_data.json 
Powiązane problemy