完整性错误: (1062,键值重复)
我想清空我的数据库mydb
,然后重新填充数据,以便查看对我的Django模型所做的一些更改的效果。结果发生了一些问题。我尝试恢复到之前的模型设置,但我仍然遇到错误。
我对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: example@example.com 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 个回答
0
这个被接受的回答解决了最初的问题,对于那些来到这个页面寻找特定错误的人来说,是一个很好的起点。
为了将来参考,如果这个问题不是特定权限的问题,而是一般的加载顺序问题,可以通过使用 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
...
7
Django会自动在每个模型上创建一些默认的权限,这些权限包括:add
(添加)、delete
(删除)和change
(修改)。你遇到的完整性错误是因为你试图创建同名的权限。只需从你的Meta描述中去掉delete_***
,这样就没问题了。