我试图清除我的数据库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 | +----+--------------+--------------+--------------+
答案 0 :(得分:7)
每个模型上的Django自动creates few default permissions,分别为:add
,delete
和change
。您正在尝试使用相同名称创建权限,从而获得完整性错误。只需从您的元描述中删除delete_***
,一切都应该没问题。
答案 1 :(得分: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
...