我想要一个自定义查询来在我的 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
方法>ModelAdminChangeList
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/