1

我需要在 ModelAdmin 中使用 ChangeList 中显示的元素,但我不知道如何获取当前的查询集。
例如,如果现在显示前 100 个元素,我想使用这个集合,如果用户传递到下一个 100,我想在集合中包含新的 100 个元素。
其他示例是当某些用户应用某些过滤器时。

在我的模型管理员中,我有:

list_display = getListDisplay(qs)

而且我想传递给getListDisplay当前的查询集,因为根据它,list_display 会有所不同。

是否有任何当前的查询集属性可以从 ModelAdmin 类访问?

UPD 1之后,我无法使其工作:

class YourAdmin(admin.ModelAdmin):
    def get_queryset(self):
        qs = super(YourAdmin, self).get_queryset()
        return qs

    def __init__(self, *args, **kwargs):
        super(YourAdmin, self).__init__(*args, **kwargs)
        qs = self.get_queryset()
4

2 回答 2

1

这是ModelAdmin.get_queryset()文档的链接

根据您的评论进行编辑:在我看来,您想要做的是动态构建 list_display 。Django 有一个模型管理员的get_list_display方法。此方法接收请求,然后您可以将其传递给 get_queryset:

class YourAdmin(admin.ModelAdmin):
    def get_list_display(self, request):
        qs = self.get_queryset(request)
        '''
        Now build the list_display as a list or tuple
        '''
        .
        .
        return list_display
于 2013-10-31T10:02:04.517 回答
0

在 django admin 中有一个叫做actions的东西。它在此处进行了描述,其工作原理如下:

class YourAdmin(admin.ModelAdmin):
    def make_something(self, request, queryset):
        queryset.update(status='p')
    actions = ['make_something',]

也许查询集是你需要的东西

UPD 1:评论后,我了解到您需要修改 ModelAdmin ojbect 的某些属性。因此,您可以在初始化后立即执行此操作:

class YourAdmin(admin.ModelAdmin):
    def __init__(self, *args, **kwargs):
        super(YourAdmin, self).__init__(*args, **kwargs)
        qs = self.getquery_set()
        // modify your list_display depending on qs
        self.list_display = ['some','fileds','here']

一些第三方应用程序,如xadmin允许您动态更改list_display,但 django 默认情况下没有此功能。

于 2013-10-31T10:08:26.723 回答