是否可以为Django管理员创建不需要 Select 某些对象即可运行的自定义管理操作?
如果try 在不 Select 对象的情况下运行操作,则会收到消息:
Items must be selected in order to perform actions on them. No items have been changed.
有没有一种方法可以覆盖此行为并让该操作无论如何运行?
是否可以为Django管理员创建不需要 Select 某些对象即可运行的自定义管理操作?
如果try 在不 Select 对象的情况下运行操作,则会收到消息:
Items must be selected in order to perform actions on them. No items have been changed.
有没有一种方法可以覆盖此行为并让该操作无论如何运行?
Yuji在正确的轨道上,但我使用了一个更简单的解决方案,可能对你有用.如果您按照下面的操作覆盖了response_操作,那么可以在判断发生之前用包含所有对象的queryset替换空queryset.这段代码还会判断您正在运行的操作,以确保在更改queryset之前,该操作已被批准在所有对象上运行,因此您可以将其限制为仅在某些情况下发生.
def response_action(self, request, queryset):
# override to allow for exporting of ALL records to CSV if no chkbox selected
selected = request.POST.getlist(admin.ACTION_CHECKBOX_NAME)
if request.META['QUERY_STRING']:
qd = dictify_querystring(request.META['QUERY_STRING'])
else:
qd = None
data = request.POST.copy()
if len(selected) == 0 and data['action'] in ('export_to_csv', 'extended_export_to_csv'):
ct = ContentType.objects.get_for_model(queryset.model)
klass = ct.model_class()
if qd:
queryset = klass.objects.filter(**qd)[:65535] # cap at classic Excel maximum minus 1 row for headers
else:
queryset = klass.objects.all()[:65535] # cap at classic Excel maximum minus 1 row for headers
return getattr(self, data['action'])(request, queryset)
else:
return super(ModelAdminCSV, self).response_action(request, queryset)