我试图清除我的数据库,mydb
,并重新填充以查看Django模型的某些更改的效果。然后发生这一切。我回滚到我的早期模型设置,但我仍然得到的错误。IntegrityError:(1062,重复输入密钥)
我不是MySQL专业人员,我不能完全弄清楚这个问题以及如何处理它;我尝试用另一个名字创建一个新的数据库,但那并没有发生。我认为这是我的Django项目创建的问题。
这里是所有的信息:
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 | +----+--------------+--------------+--------------+
这听起来像一个外国密钥检查失败。 content_type_id在哪里被用作外键? – Jrod
你可以在第86行之前编辑'C:\ Python27 \ lib \ site-packages \ django \ db \ backends \ mysql \ base.py',添加'print query%args',然后重新运行syncdb以查看确切的查询在失败之前运行。 '9-delete_category'值当然不适合'content_type_id'字段。 –