为django管理面板定制带有LIMIT的get_queryset

时间:2015-06-26 20:01:13

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

我想有一个自定义查询来显示我的admin 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]

但是当我添加限制条款[:500]时,我有这个错误:

  

异常值:一旦获取切片,就无法重新排序查询。

有什么建议吗?

3 个答案:

答案 0 :(得分:0)

显然在切片后某处正在进行排序,你应该试试这个:

link.InvokeMember("Click");

答案 1 :(得分:0)

Django在调用get_queryset中定义的自定义ChangeList方法后调用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

答案 2 :(得分:0)

您可以点击此链接https://stackoverflow.com/a/36476084 @ pahaz的回答更准确。

首先,您需要创建像@illagrenan

这样的更改列表
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获得此更改列表,

class YourModelAdmin(admin.ModelAdmin):
    def get_changelist(self, request, **kwargs):
        return CustomChangeList

我测试了它,并希望它可以帮助你。