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完成的

我得检查一下