问题描述
我试图清除数据库mydb
,然后重新填充它,以查看对Django模型所做的某些更改的影响.然后所有这一切都发生了.我回滚到了较早的模型设置,但仍然仍然得到错误.
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.
我不是MySQL专业人士,所以我不太清楚问题所在以及如何解决;我尝试用其他名称创建一个新的数据库,但是没有发生.我认为这是我的Django项目造成的问题.
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.
这里是所有信息:
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 |
+----+--------------+--------------+--------------+
推荐答案
Django自动在每个模型上都创建很少的默认权限,它们是:add
,delete
和change
.由于尝试创建具有相同名称的权限,因此出现完整性错误.只需从您的元描述中删除delete_***
,一切就可以了.
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.
这篇关于IntegrityError:(1062,密钥重复项)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!