3
votes

I was trying to purge my database, mydb, and repopulate it to see the effects of some changes to my Django model. Then all this happened. I rolled back to my earlier model set-up, but I still get the errors.

I am no MySQL pro, and I can’t quite figure out the problem and what to do about it; I tried creating a new database with another name, but that didn’t happen. I assume that it is a problem created by my Django project.

Here is all the info:


C:\Users...>python manage.py syncdb
Creating tables ...
Creating table auth_permission
Creating table auth_group_permissions
Creating table auth_group
Creating table auth_user_user_permissions
Creating table auth_user_groups
Creating table auth_user
Creating table auth_message
Creating table django_content_type
Creating table django_session
Creating table django_site
Creating table django_admin_log
Creating table forum_category
Creating table forum_thread

Creating table forum_post

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): yes
Username (Leave blank to use 'me'): admin
E-mail address: [email protected]
Password:
Password (again):
Superuser created successfully.
Traceback (most recent call last):
  File "manage.py", line 14, in 
    execute_manager(settings)
  File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line 438, in execute_manager utility.execute()
  File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line 379, in execute self.fetch_command(subcommand).run_from_argv(self.argv)
  File "C:\Python27\lib\site-packages\django\core\management\base.py", line 191, in run_from_argv self.execute(*args, **options.__dict__)
  File "C:\Python27\lib\site-packages\django\core\management\base.py", line 220, in execute output = self.handle(*args, **options)
  File "C:\Python27\lib\site-packages\django\core\management\base.py", line 351, in handle return self.handle_noargs(**options)
  File "C:\Python27\lib\site-packages\django\core\management\commands\syncdb.py", line 109, in handle_noargs emit_post_sync_signal(created_models, verbosity, interactive, db)
  File "C:\Python27\lib\site-packages\django\core\management\sql.py", line 190, in emit_post_sync_signal interactive=interactive, db=db)
  File "C:\Python27\lib\site-packages\django\dispatch\dispatcher.py", line 172, in send response = receiver(signal=self, sender=sender, **named)
  File "C:\Python27\lib\site-packages\django\contrib\auth\management\__init__.p ", line 51, in create_permissions content_type=ctype
  File "C:\Python27\lib\site-packages\django\db\models\manager.py", line 138, in create return self.get_query_set().create(**kwargs)
  File "C:\Python27\lib\site-packages\django\db\models\query.py", line 360, in create obj.save(force_insert=True, using=self.db)
  File "C:\Python27\lib\site-packages\django\db\models\base.py", line 460, in save self.save_base(using=using, force_insert=force_insert, force_update=force_up
date)
  File "C:\Python27\lib\site-packages\django\db\models\base.py", line 553, in save_base result = manager._insert(values, return_id=update_pk, using=using)
  File "C:\Python27\lib\site-packages\django\db\models\manager.py", line 195, in _insert return insert_query(self.model, values, **kwargs)
  File "C:\Python27\lib\site-packages\django\db\models\query.py", line 1436, in insert_query return query.get_compiler(using=using).execute_sql(return_id)
  File "C:\Python27\lib\site-packages\django\db\models\sql\compiler.py", line 791, in execute_sql cursor = super(SQLInsertCompiler, self).execute_sql(None)
  File "C:\Python27\lib\site-packages\django\db\models\sql\compiler.py", line 735, in execute_sql cursor.execute(sql, params)
  File "C:\Python27\lib\site-packages\django\db\backends\util.py", line 34, in execute return self.cursor.execute(sql, params)
  File "C:\Python27\lib\site-packages\django\db\backends\mysql\base.py", line 86, in execute return self.cursor.execute(query, args)
  File "C:\Users\me\AppData\Roaming\Python\Python27\site-packages\MySQLdb\cursors.py", line 174, in execute self.errorhandler(self, exc, value)
  File "C:\Users\me\AppData\Roaming\Python\Python27\site-packages\MySQLdb\connections.py", line 36, in defaulterrorhandler raise errorclass, errorvalue

django.db.utils.IntegrityError: (1062, "Duplicate entry '9-delete_category' for key 'content_type_id'")

#models.py

from django.db import models
from django.contrib.auth.models import User

class Category(models.Model):
    title = models.CharField(max_length=80)

    class Meta:
        verbose_name_plural = "categories"
        permissions = (
            ("create_category", "Can create new categories"),
            ("edit_category",   "Can edit the titles of categories"),
            ("delete_category", "Can delete a category"),
            ("merge_category",  "Can merge multiple categories together"),
        )

class Thread(models.Model):
    creation_date       = models.DateTimeField()
    author              = models.ForeignKey(User)
    title               = models.CharField(max_length=80)
    category            = models.ForeignKey(Category)

    class Meta:
        ordering = ["-creation_date"]
        permissions = (
            ("create_thread",           "Create new threads"),
            ("edit_thread",             "Edit thread titles"),
            ("delete_thread",           "Delete threads"),
            ("merge_thread",            "Merge multiple threads together"),
            ("lock_thread",             "Lock threads"),
            ("unlock_thread",           "Open locked threads"),
            ("ban_user_in_thread",      "Ban user from post in thread"),
            ("timeout_user_in_thread",  "Ban user from posting in thread temporarily"),
            ("appoint_threadmin",       "Give a user mod-like permissions in a thread"),
        )

class Bookmark(models.Model):
    user            = models.ForeignKey(User)
    thread          = models.ForeignKey(Thread)

class Subscription(models.Model):
    user            = models.ForeignKey(User)
    thread          = models.ForeignKey(Thread)

class Post(models.Model):
    creation_date   = models.DateTimeField()
    author          = models.ForeignKey(User)
    thread          = models.ForeignKey(Thread)
    content         = models.TextField()

    class Meta:
        ordering = ["creation_date"]
        permissions = (
            ("create_post", "Can create new post"),
            ("edit_post",   "Can edit all users' posts"),
            ("delete_post", "Can delete posts"),
        )

+----------------------------+
| Tables_in_mydb             |
+----------------------------+
| auth_group                 |
| auth_group_permissions     |
| auth_message               |
| auth_permission            |
| auth_user                  |
| auth_user_groups           |
| auth_user_user_permissions |
| django_admin_log           |
| django_content_type        |
| django_session             |
| django_site                |
| forum_bookmark             |
| forum_category             |
| forum_post                 |
| forum_subscription         |
| forum_thread               |
+----------------------------+

mysql> select * from django_content_type;
+----+--------------+--------------+--------------+
| id | name         | app_label    | model        |
+----+--------------+--------------+--------------+
|  1 | permission   | auth         | permission   |
|  2 | group        | auth         | group        |
|  3 | user         | auth         | user         |
|  4 | message      | auth         | message      |
|  5 | content type | contenttypes | contenttype  |
|  6 | session      | sessions     | session      |
|  7 | site         | sites        | site         |
|  8 | log entry    | admin        | logentry     |
|  9 | category     | forum        | category     |
| 10 | thread       | forum        | thread       |
| 11 | bookmark     | forum        | bookmark     |
| 12 | subscription | forum        | subscription |
| 13 | post         | forum        | post         |
+----+--------------+--------------+--------------+
2
It sounds like a foreign key check has failed. Where is content_type_id being used as a foreign key?Jrod
You could edit C:\Python27\lib\site-packages\django\db\backends\mysql\base.py before line 86, adding print query % args, then re-run syncdb to see exactly which queries are run before it fails. The '9-delete_category' value certainly doesn't look right for a 'content_type_id' field.Botond Béres

2 Answers

7
votes

Django automatically creates few default permissions on every model, these are: add, delete and change. You are getting integrity error because you are trying to create permissions with the same name. Just remove delete_*** from your Meta description and everything should be ok.

0
votes

The accepted answer solves the original question and is a good starting point for others that have come to this page looking for the particular error.

To add to this for future reference, in case this is not an issue of the specific permissions but a general fixture loading order issue, this can be solved with using call_command:

from django.test import TestCase
from django.core.management import call_command


class Tests(TestCase):
    @classmethod
    def setUpTestData(cls):
        # do some early data setup
        ...
        # then load data
        call_command('loaddata', 'myfixture', verbosity=0)

    def mytest(self):
        # some tests in here
        ...