是否可以为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)

Django相关问答推荐

Django BooleanField如何使用RadioSelect?

Django中的Sync_to_Async修饰器、异步视图

在Django中提交表单后更改模型数据

如何在Django模板中为无效词典查找打开异常?

Django 隐藏特定人员的媒体文件链接

使用自定义的AuthBackend时,无法使用request.user.is_authenticated或@login_required修饰符

Django:获取每组最新的N条记录

django 的 Manager.create() 方法有什么作用?

如何将数据(具体归档)从views.py 传递到models.py

如何在Django中制作一个不 Select 以前日期的日期 Select 器

在 settings.py 中指定 Django 测试数据库名称

使用 Django 一次更新多条记录

django - 表单没有错误,但 form.is_valid() 没有验证

Django REST Framework ModelSerializer get_or_create 功能

一个简单的Django和CSS示例

django 有条件地过滤对象

Django Admin:如何在内联中显示模型上定义的属性?

在 Django 开发服务器中关闭静态文件的缓存

在 Django REST 框架序列化程序中动态排除或包含字段

Django:必须使用对象 pk 或 slug 调用通用详细视图