完整性错误和操作错误 Django 1.6.6
Posted
技术标签:
【中文标题】完整性错误和操作错误 Django 1.6.6【英文标题】:Integrity Error and Operational Error Django 1.6.6 【发布时间】:2014-12-08 20:16:43 【问题描述】:我刚开始开发一个 Django 博客,并且正在关注这个 youtube 教程 - https://www.youtube.com/watch?v=7rgph8en0Jc&spfreload=1
我正在使用 Django 1.6.6。
-
每次我尝试在 Admin 中添加条目时,都会收到此错误。感谢您的帮助!
环境:
Django 版本:1.6.6 Python版本:2.7.8 已安装的应用程序: ('django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', '好博客', 'django_markdown') 已安装的中间件: ('django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware')
Traceback: File "C:\Users\user\desktop\firstblog\lib\site-packages\django\core\handlers\base.py"
在 get_response 中 112.响应=wrapped_callback(请求,*callback_args,>**callback_kwargs) 文件“C:\Users\user\desktop\firstblog\lib\site-packages\django\contrib\admin\options.py” 在包装中 450. return self.admin_site.admin_view(view)(*args, **kwargs) 文件“C:\Users\user\desktop\firstblog\lib\site-packages\django\utils\decorators.py” 在 _wrapped_view 99. 响应 = view_func(请求,*args,**kwargs) 文件“C:\Users\user\desktop\firstblog\lib\site-packages\django\views\decorators\cache.py” 在 _wrapped_view_func 52. response = view_func(request, *args, **kwargs) 文件“C:\Users\user\desktop\firstblog\lib\site-packages\django\contrib\admin\sites.py” 在内部 198. 返回视图(请求,*args,**kwargs) 文件“C:\Users\user\desktop\firstblog\lib\site-packages\django\utils\decorators.py” 在 _wrapper 中 29. return bound_func(*args, **kwargs) 文件“C:\Users\user\desktop\firstblog\lib\site-packages\django\utils\decorators.py” 在 _wrapped_view 99. 响应 = view_func(请求,*args,**kwargs) 文件“C:\Users\user\desktop\firstblog\lib\site-packages\django\utils\decorators.py” 在 bound_func 25. 返回函数(自我,*args2,**kwargs2) 文件“C:\Users\user\desktop\firstblog\lib\site-packages\django\db\transaction.py” 在内部 371. 返回函数(*args,**kwargs) 文件“C:\Users\user\desktop\firstblog\lib\site-packages\django\contrib\admin\options.py” 在 add_view 1149. self.save_model(request, new_object, form, False) 文件“C:\Users\user\desktop\firstblog\lib\site-packages\django\contrib\admin\options.py” 在 save_model 878. obj.save() 文件“C:\Users\user\desktop\firstblog\lib\site-packages\django\db\models\base.py” 在保存 545. force_update=force_update, update_fields=update_fields) 文件“C:\Users\user\desktop\firstblog\lib\site-packages\django\db\models\base.py” 在 save_base 573. 更新 = self._save_table(原始,cls,force_insert,force_update,使用,>update_fields) 文件“C:\Users\user\desktop\firstblog\lib\site-packages\django\db\models\base.py” 在_save_table 654. 结果 = self._do_insert(cls._base_manager, using, fields, update_pk, raw) 文件“C:\Users\user\desktop\firstblog\lib\site-packages\django\db\models\base.py” 在 _do_insert 687. 使用=使用,原始=原始) 文件“C:\Users\user\desktop\firstblog\lib\site-packages\django\db\models\manager.py” 在_插入 232. return insert_query(self.model, objs, fields, **kwargs) 文件“C:\Users\user\desktop\firstblog\lib\site-packages\django\db\models\query.py” 在插入查询中 1514. return query.get_compiler(using=using).execute_sql(return_id) 文件“C:\Users\user\desktop\firstblog\lib\site-packages\django\db\models\sql\compiler.py” 在执行_sql 903. cursor.execute(sql,参数) 文件“C:\Users\user\desktop\firstblog\lib\site-packages\django\db\backends\util.py” 在执行 69. return super(CursorDebugWrapper, self).execute(sql, params) 文件“C:\Users\user\desktop\firstblog\lib\site-packages\django\db\backends\util.py” 在执行 53. return self.cursor.execute(sql, params) 文件“C:\Users\user\desktop\firstblog\lib\site-packages\django\db\utils.py” 在退出 99. 六.reraise(dj_exc_type, dj_exc_value, traceback) 文件“C:\Users\user\desktop\firstblog\lib\site-packages\django\db\backends\util.py” 在执行 53. return self.cursor.execute(sql, params) 文件“C:\Users\user\desktop\firstblog\lib\site-packages\django\db\backends\sqlite3\base.py” 在执行 452. return Database.Cursor.execute(self, query, params)
Exception Type: IntegrityError at /admin/niceblog/entry/add/ Exception Value: niceblog_entry.slug may not be NULL
-
每次我尝试在 Admin 中编辑条目时,都会引发此错误
环境:
Django 版本:1.6.6 Python 版本:2.7.8 已安装的应用程序: ('django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'niceblog', 'django_markdown') 已安装的中间件: ('django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware')
追溯:文件 “C:\Users\user\desktop\firstblog\lib\site-packages\django\core\handlers\base.py” 在 get_response 112. response = Wrapped_callback(request, *callback_args, **callback_kwargs) 文件 "C:\Users\user\desktop\firstblog\lib\site-packages\django\contrib\admin\options.py" 在包装中 450. return self.admin_site.admin_view(view)(*args, **kwargs) 文件 "C:\Users\user\desktop\firstblog\lib\site-packages\django\utils\decorators.py" 在 _wrapped_view 99. response = view_func(request, *args, **kwargs) 文件 "C:\Users\user\desktop\firstblog\lib\site-packages\django\views\decorators\cache.py" 在 _wrapped_view_func 52. response = view_func(request, *args, **kwargs) 文件 "C:\Users\user\desktop\firstblog\lib\site-packages\django\contrib\admin\sites.py" 在内部 198. 返回视图(request, *args, **kwargs) 文件 "C:\Users\user\desktop\firstblog\lib\site-packages\django\utils\decorators.py" 在 _wrapper 中 29. 返回 bound_func(*args, **kwargs) 文件“C:\Users\user\desktop\firstblog\lib\site-packages\django\utils\decorators.py” 在 _wrapped_view 99. response = view_func(request, *args, **kwargs) 文件 "C:\Users\user\desktop\firstblog\lib\site-packages\django\utils\decorators.py" 在 bound_func 25. 返回 func(self, *args2, **kwargs2) 文件 "C:\Users\user\desktop\firstblog\lib\site-packages\django\db\transaction.py" 在内部 371. 返回 func(*args, **kwargs) 文件 "C:\Users\user\desktop\firstblog\lib\site-packages\django\contrib\admin\options.py" 在 change_view 1255. form = ModelForm(instance=obj) 文件“C:\Users\user\desktop\firstblog\lib\site-packages\django\forms\models.py” 在 初始化 315. object_data = model_to_dict(instance, opts.fields, opts.exclude) 文件 "C:\Users\user\desktop\firstblog\lib\site-packages\django\forms\models.py" 在 model_to_dict 141. data[f.name] = list(f.value_from_object(instance).values_list('pk', flat=True)) 文件 "C:\Users\user\desktop\firstblog\lib\site-packages\django\db\models\query.py" 在 迭代 96. self._fetch_all() 文件“C:\Users\user\desktop\firstblog\lib\site-packages\django\db\models\query.py” 在 _fetch_all 857. self._result_cache = list(self.iterator()) 文件“C:\Users\user\desktop\firstblog\lib\site-packages\django\db\models\query.py” 在迭代器中 1068. 对于 self.query.get_compiler(self.db).results_iter() 中的行:文件 "C:\Users\user\desktop\firstblog\lib\site-packages\django\db\models\sql\compiler.py" 在 results_iter 713. 对于 self.execute_sql(MULTI) 中的行:文件“C:\Users\user\desktop\firstblog\lib\site-packages\django\db\models\sql\compiler.py” 在执行_sql 786. cursor.execute(sql, params) 文件“C:\Users\user\desktop\firstblog\lib\site-packages\django\db\backends\util.py” 在执行 69. 返回 super(CursorDebugWrapper, self).execute(sql, params) 文件 "C:\Users\user\desktop\firstblog\lib\site-packages\django\db\backends\util.py" 在执行 53. 返回 self.cursor.execute(sql, params) 文件“C:\Users\user\desktop\firstblog\lib\site-packages\django\db\utils.py” 在退出 99. 六.reraise(dj_exc_type, dj_exc_value, traceback) 文件 "C:\Users\user\desktop\firstblog\lib\site-packages\django\db\backends\util.py" 在执行 53. 返回 self.cursor.execute(sql, params) 文件“C:\Users\user\desktop\firstblog\lib\site-packages\django\db\backends\sqlite3\base.py” 在执行 452. return Database.Cursor.execute(self, query, params)
异常类型:/admin/niceblog/entry/2/ 异常处的 OperationalError 值:没有这样的表:niceblog_entry_tags
models.py 文件--->
class Tag(models.Model):
slug = models.SlugField(max_length=200, unique=True)
def __unicode__(self):
return self.slug
class Entry(models.Model):
title = models.CharField(max_length=200)
body = models.TextField()
publish = models.BooleanField(default=True)
created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True)
tags = models.ManyToManyField(Tag)
def __unicode__(self):
return self.title
class Meta:
verbose_name = "Blog Entry"
verbose_name_plural = "Blog Entries"
ordering = ['-created']
admin.py 文件--->
class EntryAdmin(MarkdownModelAdmin):
list_display = ("title", "created")
admin.site.register(Entry, EntryAdmin)
admin.site.register(Tag)
【问题讨论】:
您没有正确同步/迁移您的数据库。 我尝试了几次通常的 python manage.py syncdb。也用 python manage.py sql 检查了表。不知何故,“标签”没有出现在条目表下。 @codemax 删除所有表(如果您这样做是为了练习),删除所有迁移并创建一个初始迁移。 python manage.py schemamigration --init 嗨,我的 manage.py 中没有架构迁移。但我删除了我的表并删除了迁移 我通过将它添加到我的 settings.py 文件中找到它 【参考方案1】:我猜,Entry.tags 是在创建表之后添加的。 如果可以将 django 升级到 1.7,那么您可以使用built-in migrations。 Firstable 将您的应用重置为实际的数据库架构,即删除标签字段,然后:
# Create initial migrations
$ python manage.py makemigrations your_app
# Migrate
$ python manage.py migrate your_app
# Add your tags field. Repeat
$ python manage.py makemigrations your_app
$ python manage.py migrate your_app
如果您想继续使用 django 1.6,请使用 South。几乎是一样的:
# Create initial migrations
$ python manage.py schemamigration your_app intial --init
# Migrate
$ python manage.py migrate your_app --fake
# Add your tags field. Create migration
$ python manage.py schemamigration your_app add_tags --auto
$ python manage.py migrate your_app
【讨论】:
您好,感谢您的回复。我下载了南 1.0 但在 manage.py 中没有架构迁移...我如何获得它? 我在我的 settings.py 文件中添加了它 我清除了第一阶段,但每次我应用 python manage.py 迁移我的应用程序时,它都会告诉我“致命错误 - 以下 SQL 查询失败:CREATE TABLE "niceblog_tag" ("id" integer NOT NULL PRIMARY KEY, "slug" varchar(200) NOT NULL UNIQUE) 错误是:表 "niceblog_tag" 已经存在。 我使用 django 1.6 和 South 进入了最后一部分,但错误仍然存在。 看起来你应该把标签放在第一阶段来伪造它迁移。因为您的数据库中已经有了它。好的,下一步:打开迁移文件,它是 app/migrations/0002_add_tags.py。并评论 db.create_table('app_tag', ...) 然后再次迁移。如果它会通过迁移,请删除所有迁移,因为它们现在很乱。以上是关于完整性错误和操作错误 Django 1.6.6的主要内容,如果未能解决你的问题,请参考以下文章
完整性错误:更新或删除违反外键约束。 Django + PostgreSQL
通过避免 django 模型保存方法中的完整性错误来增加 slug