2011-06-22 81 views
24

我加載與dumpdata創造了一個夾具,並獲得以下異常時加載夾具時:IntegrityError 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 

這是一個sqlite3的後端。

更新:使用自然鍵在這裏沒有什麼區別。

這是什麼意思?爲什麼會發生?

回答

47

顯然,不謹慎的陷阱之一是,出口夾具時必須排除contenttypes。 (感謝#django提供的信息)。

要排除內容類型,請在運行dumpdata命令時使用-e選項。

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

是啊,被擊中的那一個了幾次,雖然從一個引擎遷移開發DBS另一隻時。測試裝置的一般規則是,你應該知道它的內容,因此你知道你的測試中發生了什麼,所以你沒有任何意外。 – eternicode

+7

像這樣的東西對我有用(僅供進一步參考):./manage.py dumpdata -e contenttypes> initial_data.json。 –

+1

感謝節省了很多 – soField

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