完整性错误和操作错误 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 Postgres 完整性错误

django查看完整性错误

完整性错误:更新或删除违反外键约束。 Django + PostgreSQL

通过避免 django 模型保存方法中的完整性错误来增加 slug

在 Django 中为 Selenium 测试加载夹具时出现完整性错误

将现有站点更新为新的 Django 1.5 用户模型后 django_admin_log 上的完整性错误