Django使用只读数据库的多数据库管理搜索结果
我正在使用管理功能 问题是:我的一些桌子很大。因此,搜索需要花费很长时间,并在我的生产数据库上增加额外的负载 由于我有一个生产数据库的跟随者,我认为一个好主意是将跟随者用作只读数据库,特别是对于那些类型的请求 因此,我决定在Django使用只读数据库的多数据库管理搜索结果,django,django-admin,django-settings,django-database,Django,Django Admin,Django Settings,Django Database,我正在使用管理功能 问题是:我的一些桌子很大。因此,搜索需要花费很长时间,并在我的生产数据库上增加额外的负载 由于我有一个生产数据库的跟随者,我认为一个好主意是将跟随者用作只读数据库,特别是对于那些类型的请求 因此,我决定在设置.数据库中添加一个“只读”数据库,并在我的管理类中添加附加费模型管理.获取搜索结果: def get_search_results(self, request, queryset, search_term): queryset, use_distinct = su
设置.数据库中添加一个“只读”数据库,并在我的管理类中添加附加费模型管理.获取搜索结果
:
def get_search_results(self, request, queryset, search_term):
queryset, use_distinct = super(ReadOnlyDatabaseAdmin, self)\
.get_search_results(request, queryset, search_term)
queryset = queryset.using('read-only')
return queryset, use_distinct
在这次更新之后,我在尝试将某个对象设置为另一个对象的外键相关对象时,开始出现一些路由器错误:
Cannot assign "...": the current database router prevents this relation
NB:当我测试并得到上述错误时,只读数据库与默认数据库相同,我还没有使用follower。我刚刚在设置中设置了一个'read-only'
键。DATABASES
,指向与DATABASES['default']
相同的目录
因此,问题不是来自使用不同的数据库,而是来自数据库路由器
提供更多详细信息:此错误主要来自在管理员搜索结果页面中执行的管理员操作(/admin/app/obj/?q=…
)
我想这可能是因为我替换了方法中的queryset
对象。也许这个对象实际上是在其他地方重复使用的,特别是在管理操作中。。。?我目前正在调查此事
因此,我感兴趣的是:
- 查找错误的原因
- 和/或找到另一种方法在追随者数据库上执行管理员搜索请求,以卸载主数据库
这并不完全是您要寻找的,但它可以帮助优化查询。我想错误的答案是:
if request.method == 'GET':
queryset = queryset.using('read-only')
事实上,搜索结果不是用GET,而管理操作是用POST完成的
我得检查一下