python django 快速入门( 二 )


python django 快速入门

文章插图
要提供中间页,只需要返回一个 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)))

python django 快速入门

文章插图
让 actions 在整个站点中都有效如果想要让上述中的导出操作在整个管理站点中都能使用,可以这样做:
from django.contrib import admin
admin.site.a
python django 快速入门

文章插图
禁用 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

python django 快速入门

文章插图
有条件的启用或者禁用 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

python django 快速入门

文章插图
设置 action 的权限action 可以通过设置 allowed_permissions 属性来限制具有特定权限的用户的可用性:
efmake_published(modeladmin, request, queryset):
queryset.update(status='p')
make_published.allowed_permissiOns= ('change',)
如果 allowed_permissions 具有多个权限,则只要用户通过至少一个权限检查,该操作就可用 。allowed_permissions 可用值为:
? a
python django 快速入门

文章插图


推荐阅读