gpt4 book ai didi

mysql - "ContentType matching Query does not exist"- 仅适用于 SQLite,不适用于 MySQL

转载 作者:行者123 更新时间:2023-11-29 02:22:36 36 4
gpt4 key购买 nike

我在 Django 测试框架的运行方式上遇到了一个奇怪的错误。

使用 SQLite 数据库后端时,所有测试都崩溃并出现以下错误:

  File "[]/core/tests/test_admin.py", line 91, in setUpSomething
content_type = ContentType.objects.get(app_label='core', model='SomeModel')
File "[]/lib/python2.7/site-packages/django/db/models/manager.py", line 151, in get
return self.get_queryset().get(*args, **kwargs)
File "[]/lib/python2.7/site-packages/django/db/models/query.py", line 310, in get
self.model._meta.object_name)
DoesNotExist: ContentType matching query does not exist.

但是,同样的代码在MySQL后台下执行的很好。

显然 Django 应该让这些函数与所使用的后端无关?

最佳答案

我遇到了同样的问题,我不知道我的解决方案是否有帮助,但它解决了我的问题,所以开始吧。

在我的应用程序代码中,我试图通过以下方式查询 ContentType 实例:

email = ContentType.objects.get(app_label="users", model="EmailAddress")

这在我们实际的 MySQL 数据库上运行良好,但在 SQLite 测试数据库下的测试失败了。但是,如果我将模型定义切换为小写,它在两个地方都有效:

email = ContentType.objects.get(app_label="users", model="emailaddress")

我猜这可能与 default collation in MySQL of case-insensitivity 有关,所以如果我区分大小写进行比较,第一个查询应该不会起作用

事实上,当我查看我的数据库时,django_content_type 表中的所有 model 标签都是小写的,SQLite 关心(默认情况下)大小写,所以我的查询我的测试合理地失败了。

关于mysql - "ContentType matching Query does not exist"- 仅适用于 SQLite,不适用于 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29193141/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com