首页 > 解决方案 > 使用 raw() 覆盖 Django Admin get_queryset 会导致 DatabaseError

问题描述

为了加快我的管理页面,我决定get_queryset()用原始查询覆盖我,但它会导致:

Database error: Something’s wrong with your database installation. Make sure the appropriate database tables have been created, and make sure the database is readable by the appropriate user.

我错过了一些步骤吗?我已经确认该查询在 PSQL 中有效,所以我看不出出了什么问题。我尝试将其缩减为以下内容,但仍然出错。

def get_queryset(self, request):
    return MyObject.objects.raw('SELECT * FROM myapp_myobject')

标签: djangodjango-modelsdjango-admin

解决方案


问题是raw返回的不是QuerySet实例,而是一个RawQuerySet,它确实实现了迭代器协议和表示,但没有 Django 视图在后台使用的一堆其他方法。

我建议使用extra代替,或者只从原始查询中选择 ID 列,然后点击另一个类似MyObject.objects.filter(id__in=your_ids_list_from_raw)


推荐阅读