我需要在ModelAdmin中使用ChangeList中显示的元素,但我不知道如何获取当前的查询集。
例如,如果现在显示前100个元素,我想使用这个集合,如果用户传递给下一个100,我想在集合中有新的100个元素。
其他例子是当某些用户使用某些过滤器时。
在我的模型管理员中,我有:
list_display = getListDisplay(qs)
我想传递给getListDisplay
当前的查询集,因为依赖于它,list_display会有所不同。
在ModelAdmin类中可以访问任何当前的queryset属性吗?
在 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()
答案 0 :(得分:1)
根据您的评论进行修改: 在我看来,你想要做的是动态构建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
答案 1 :(得分:0)
在django admin中,有一个名为 actions 的东西。它在here中描述并且工作方式如下:
class YourAdmin(admin.ModelAdmin):
def make_something(self, request, queryset):
queryset.update(status='p')
actions = ['make_something',]
也许 queryset 是你需要的东西
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默认情况下不具备此功能。