我想有一个自定义查询来显示我的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]
时,我有这个错误:
异常值:一旦获取切片,就无法重新排序查询。
有什么建议吗?
答案 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
我测试了它,并希望它可以帮助你。