文章插图
要提供中间页,只需要返回一个 HttpResponse 或者子类即可 。例如一个导出选中对象 json 文件的操作:
from django.core import serializers
from django.http import HttpResponse
defexport_as_json(modeladmin, request, queryset):
respOnse= HttpResponse(content_type="application/json")
serializers.serialize("json", queryset, stream=response)
return response
但是这样可能会使 action 的逻辑非常复杂,推荐做法是返回一个 HTTP 重定向,重定向到一个新的页面上,这样可以在页面的视图中执行更复杂的逻辑,避免 action 中充满复杂的逻辑 。
from django.contrib import admin
fromdjango.contrib.contenttypes.models import ContentType
from django.http import HttpResponseRedirect
defexport_selected_objects(modeladmin, request, queryset):
selected =request.POST.getlist(admin.ACTION_CHECKBOX_NAME)
ct = ContentType.objects.get_for_model(queryset.model)
return HttpResponseRedirect("/export/?ct=%s&ids=%s"% (ct.pk, ",".join(selected)))
文章插图
让 actions 在整个站点中都有效如果想要让上述中的导出操作在整个管理站点中都能使用,可以这样做:
from django.contrib import admin
admin.site.a
文章插图
禁用 action禁用站点范围作用的的 action:
admin.site.disable_action('delete_selected')
这将在整个管理站点范围内禁用该 action 。
如果需要复用已经禁用的 action 。只需要在相应的 ModelAdmin 的actions 属性中添加这个 action即可 。例如复用上述禁用的 action:
# This one will
classAnotherModelAdmin(admin.ModelAdmin):
actiOns= ['delete_selected']
在某个 ModelAdmin 中禁用所有的 action,只需要将 action 属性设置为None 即可 。
class MyModelAdmin(admin.ModelAdmin):
actiOns=None
文章插图
有条件的启用或者禁用 action通过重写 ModelAdmin的get_actions 方法可以实现有条件的启用或者禁用 action 。该方法返回一个允许使用的 actions 字典,键是操作名称,值是(函数、名称、short_description)元组 。例如,如果您只希望名称以“J”开头的用户能够批量删除对象:
class MyModelAdmin(admin.ModelAdmin):
...
def get_actions(self, request):
actiOns=super.get_actions(request)
if request.user.username[0].upper !='J':
if'delete_selected'in actions:
del actions['delete_selected']
return actions
文章插图
设置 action 的权限action 可以通过设置 allowed_permissions 属性来限制具有特定权限的用户的可用性:
efmake_published(modeladmin, request, queryset):
queryset.update(status='p')
make_published.allowed_permissiOns= ('change',)
如果 allowed_permissions 具有多个权限,则只要用户通过至少一个权限检查,该操作就可用 。allowed_permissions 可用值为:
? a
文章插图
推荐阅读
- Excel怎么样隐藏列,Excel如何快速隐藏行列
- Win0快速截图,电脑怎么截图快捷键win10
- 手机怎么快速刷网课,手机刷学习通课程次数
- 充电器和快速充电器有什么区别 原装充电器和适配充电器区别在哪
- 蛮荒纪元怎么快速赚金币,山海经之蛮荒修仙怎么样
- iphone怎么快速整理文件夹 如何快速整理iphone文件夹
- Excel如何快速填充序列,excel怎么自动填充序列号
- 电脑装系统基本常识 电脑新手如何快速学会安装系统
- python文件怎么保存 python文件正确存放
- 微信群怎么快速@一个人