2011-06-22 22 views
24
Ben dumpdata ile oluşturulan bir fikstür yüklerken ve aşağıdaki özel durum alıyorum

sırasında fikstür yüklerken:IntegrityError django test

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 

Bu Sqlite3 arka uca sahip olduğunu. Güncelleştirme: Doğal anahtarların kullanılması burada bir fark yaratmamaktadır.

Bu ne anlama geliyor ve neden oluyor?

cevap

47

Görünüşe göre, tuzağa düşmeyen tuzaklardan biri, armatürleri ihraç ederken içeriğin türlerini içermemesi gerektiğidir. (Bilgi için #django'daki alt kısma teşekkür ederiz).

İçerik türlerini hariç tutmak için dumpdata komutunu çalıştırırken -e seçeneğini kullanın.

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

Evet, başka bir motordan dev dbs göç yalnızca olsa o biri tarafından bir kaç kez vuruldu. Test fikstürleri için genel bir kural, bilmeniz gereken * tam olarak * bunların içinde ne olduğunu bilmenizdir, bu yüzden testlerinizde neler olduğunu biliyorsunuz, bu yüzden sürprizleriniz yok. – eternicode

+7

Bunun gibi bir şey benim için çalıştı (sadece daha fazla referans için): ./manage.py dumpdata -e contenttypes> initial_data.json. –

+1

teşekkürler çok kaydedildi – soField

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