python - 带有 LIMIT 的自定义 get_queryset for django 管理面板

标签 python django django-admin django-queryset django-orm

我想要一个自定义查询来在我的 django 管理面板中显示一个元素列表。

所以,为了得到这个,我使用了这样的代码:

class MyAdmin(admin.ModelAdmin):
....
   def get_queryset(self, request):
        return Post.objects.filter(author_type=AuthorType.USER)

这很好用,但我还需要为此查询集添加一个 LIMIT:

class MyAdmin(admin.ModelAdmin):
....
   def get_queryset(self, request):
        return Post.objects.filter(author_type=AuthorType.USER)[:500]

但是当我添加 limit 子句时 [:500] 我有这个错误:

Exception Value: Cannot reorder a query once a slice has been taken.

有什么建议吗?

最佳答案

Django 正在调用 ChangeList 中定义的另一个 get_queryset 方法 after 调用 中定义的自定义 get_queryset 方法>ModelAdmin(参见 ChangeList source code)。

要在管理员中正确应用限制,请定义您自己的 ChangeList:

from django.contrib.admin.views.main import ChangeList

class CustomChangeList(ChangeList):
    def get_queryset(self, request):
        queryset = super(CustomChangeList, self).get_queryset(request)

        return queryset[:5000]

并从 ModelAdmin 返回这个类:

@admin.register(MyModel)
class MyModelAdmin(admin.ModelAdmin):
    list_display = ['__str__']

    def get_changelist(self, request, **kwargs):
        return CustomChangeList

关于python - 带有 LIMIT 的自定义 get_queryset for django 管理面板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31081228/

相关文章:

python - 如何在 django admin 中创建一个自动填充和自动递增的字段

python - 在不保存的情况下获取 PIL 图像的二进制表示

python - Scrapy: 'str' 对象没有属性 'iter'

python - 为什么我的 python 脚本只是打开 IDLE?

django - Django Admin-禁用编辑并删除特定模型的 “Save”按钮

python - 是否可以在 Django 管理面板中过滤外键的选择?

python - Python 3 中导入路径的问题

python - Django 查询集索引随机播放并且不记得我的更改

python - django-rest-swagger 返回内部服务器错误

django - 如何从另一个模型引用 Django 模型