Using a model descended from the provided User model (as described in http://scottbarnham.com/blog/2008/08/21/extending-the-django-user-model-with-inheritance/), in combination with using a fixture, seems to attempt to load the same data twice, resulting in the following:
$ python ./manage.py syncdb
Creating table auth_permission
Creating table auth_group
Creating table auth_user
Creating table auth_message
Creating table django_content_type
Creating table django_session
Creating table django_admin_log
Creating table testapp_customuser
You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): no
Installing index for auth.Permission model
Installing index for auth.Message model
Installing index for admin.LogEntry model
Installing json fixture 'initial_data' from absolute path.
Problem installing fixture 'initial_data.json': Traceback (most recent call last):
File "/usr/lib/python2.4/site-packages/django/core/management/commands/loaddata.py", line 116, in handle
obj.save()
File "/usr/lib/python2.4/site-packages/django/core/serializers/base.py", line 163, in save
models.Model.save_base(self.object, raw=True)
File "/usr/lib/python2.4/site-packages/django/db/models/base.py", line 379, in save_base
result = manager._insert(values, return_id=update_pk)
File "/usr/lib/python2.4/site-packages/django/db/models/manager.py", line 138, in _insert
return insert_query(self.model, values, **kwargs)
File "/usr/lib/python2.4/site-packages/django/db/models/query.py", line 894, in insert_query
return query.execute_sql(return_id)
File "/usr/lib/python2.4/site-packages/django/db/models/sql/subqueries.py", line 309, in execute_sql
cursor = super(InsertQuery, self).execute_sql(None)
File "/usr/lib/python2.4/site-packages/django/db/models/sql/query.py", line 1724, in execute_sql
cursor.execute(sql, params)
File "/usr/lib/python2.4/site-packages/django/db/backends/util.py", line 19, in execute
return self.cursor.execute(sql, params)
File "/usr/lib/python2.4/site-packages/django/db/backends/sqlite3/base.py", line 168, in execute
return Database.Cursor.execute(self, query, params)
IntegrityError: column username is not unique
Same thing with a postgres db:
python ./manage.py syncdb
Installing json fixture 'initial_data' from absolute path.
Problem installing fixture 'initial_data.json': Traceback (most recent call last):
File "/usr/lib/python2.4/site-packages/django/core/management/commands/loaddata.py", line 116, in handle
obj.save()
File "/usr/lib/python2.4/site-packages/django/core/serializers/base.py", line 163, in save
models.Model.save_base(self.object, raw=True)
File "/usr/lib/python2.4/site-packages/django/db/models/base.py", line 379, in save_base
result = manager._insert(values, return_id=update_pk)
File "/usr/lib/python2.4/site-packages/django/db/models/manager.py", line 138, in _insert
return insert_query(self.model, values, **kwargs)
File "/usr/lib/python2.4/site-packages/django/db/models/query.py", line 894, in insert_query
return query.execute_sql(return_id)
File "/usr/lib/python2.4/site-packages/django/db/models/sql/subqueries.py", line 309, in execute_sql
cursor = super(InsertQuery, self).execute_sql(None)
File "/usr/lib/python2.4/site-packages/django/db/models/sql/query.py", line 1724, in execute_sql
cursor.execute(sql, params)
File "/usr/lib/python2.4/site-packages/django/db/backends/util.py", line 19, in execute
return self.cursor.execute(sql, params)
IntegrityError: duplicate key value violates unique constraint "testapp_customuser_username_key"
Note: This does not happen when only one record exists in the fixture data. The sample data I provide has two unique records that should not clash.
The following is the model definition that seems to not be handled:
from django.db import models
from django.contrib.auth.models import User, UserManager
from django.utils.translation import ugettext_lazy as _
from datetime import datetime
class Customuser(User):
username = models.CharField(_('customer id'), max_length=30, unique=True, help_text=_("Required. 30 characters or fewer. Alphanumeric characters only (letters, digits and underscores)."))
email_id = models.EmailField(_('e-mail address'), blank=True, null=True, unique=True, db_index=True)
name = models.CharField(max_length=100, blank=True)
address_1 = models.CharField(max_length=255, blank=True)
address_2 = models.CharField(max_length=255, blank=True)
city = models.CharField(max_length=80, blank=True)
state = models.CharField(max_length=13, blank=True)
zipcode = models.CharField(max_length=13, blank=True)
home_phone = models.CharField(max_length=15, blank=True)
mobile_phone = models.CharField(max_length=15, blank=True)
CONTACT_PREFERANCE_CHOICES = (
('E', 'E-Mail'),
('M', 'Regular Mail'),
('P', 'Phone'),
('N', 'No contact'),
)
contact_method = models.CharField(max_length=1, choices=CONTACT_PREFERANCE_CHOICES, blank=True)
member_since = models.DateField(blank=True, null=True)
last_activity = models.DateField(blank=True, null=True)
point_balance = models.IntegerField(default=0)
NHRA_member = models.BooleanField(default=False)
IRL_member = models.BooleanField(default=False)
def __unicode__(self):
return u'%s' % self.username
# Use UserManager to get the create_user method, etc.
objects = UserManager()
I have provided a sample app that will reproduce this issue. Both 1.0 and the latest SVN have this issue.
I have a feeling that this could be related to #8886 - the fact that your child model duplicates a field name in the parent model (username). I'll need to look a little closer to be certain.