Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

IntegrityError when loading fixture during django testing

Tags:

I'm loading a fixture created with dumpdata, and getting the following exception:

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 

This is with a sqlite3 backend.

Update: Using natural keys doesn't make a difference here.

What does it mean, and why is it happening?

like image 321
Marcin Avatar asked Jun 22 '11 22:06

Marcin


People also ask

What is the purpose of Django fixtures?

A fixture is a collection of data that Django knows how to import into a database. The most straightforward way of creating a fixture if you've already got some data is to use the manage.py dumpdata command.

How do I create a fixture in Django?

You must create a directory in your app named fixtures and put your fixtures files there. You can write them in json or xml, one easy way to make them is to create some objects in the admin interface and then run manage.py dumpdata. That would dump the data from the objects you created into fixture files.


2 Answers

Apparently one of the traps for the unwary is that one must exclude contenttypes when exporting fixtures. (Thanks to subsume on #django for the information).

To exclude content types use the -e option when running the dumpdata command.

$./manage.py dumpdata -e contenttypes > initial_data.json 
like image 179
Marcin Avatar answered Sep 28 '22 06:09

Marcin


python manage.py dumpdata --exclude=contenttypes --exclude=auth.Permission > initial_data.json 
like image 34
Furkhat Avatar answered Sep 28 '22 04:09

Furkhat