[英]Custom get_queryset with LIMIT for django admin panel
我会有一个自定义查询来在我的管理 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]
我有这个错误:
异常值:一旦获取切片,就无法对查询重新排序。
有什么建议?
Django是调用另一个get_queryset
中定义的方法ChangeList
调用自定义后get_queryset
中定义的方法ModelAdmin
(见ChangeList
的源代码)。
要在 admin 中正确应用限制,请定义您自己的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
显然在你的切片之后发生了排序,你应该试试这个:
def get_queryset(self, request):
qs = super(MyAdmin, self).queryset(request)
return qs.filter(author_type=AuthorType.USER)[:500]
您可以点击此链接, 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]
然后让您的模型管理员获取此更改列表,
class YourModelAdmin(admin.ModelAdmin):
def get_changelist(self, request, **kwargs):
return CustomChangeList
我测试了它并解决了它,希望它可以帮助你。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.