Django Admin:使用类执行批量管理操作

Django Admin:使用类执行批量管理操作,django,django-admin,Django,Django Admin,我一直在尝试在Django中自动创建一系列管理操作 基本上,我想创建一种可能性,批量更改项目对象上的状态字段。状态字段是ForeignkeyField 我认为这样的课程会有用: class StatusAction(object): def __init__(self,status): self.status = status def make_action(self, modeladmin, request, queryset): self

我一直在尝试在Django中自动创建一系列管理操作

基本上,我想创建一种可能性,批量更改项目对象上的状态字段。状态字段是ForeignkeyField

我认为这样的课程会有用:

class StatusAction(object):

    def __init__(self,status):
         self.status = status

    def make_action(self, modeladmin, request, queryset):
        self.queryset = queryset.update(status=self.status)

    make_action.short_description = "Change status to '%s' for selected projects" % status
然后声明如下操作:

actions = [StatusAction(s.id).make_action for s in Status.objects.all()]
我遇到两个问题:

  • 只有一个操作在管理界面中结束(最后一个被取消)
  • make_action.short_description属性具有类作用域,因此我无法将其特定于每个实例。将self.make_action.short_描述放在make_action中也不起作用

我还尝试用闭包(函数中的函数)来实现这一点。它解决了函数问题的属性,但在管理中仍然只有一个操作。

据我所知,操作函数应该有不同的名称:

def create_action(status):
    def action_func(modeladmin, request, queryset):
        print status
    action_func.__name__ = 'make_action_%d' % status.id
    action_func.short_description = "Change status to '%s' for selected projects" % status
    return action_func

actions = []
for s in Status.objects.all():
    actions.append(create_action(s))

据我所知,操作函数应具有不同的名称:

def create_action(status):
    def action_func(modeladmin, request, queryset):
        print status
    action_func.__name__ = 'make_action_%d' % status.id
    action_func.short_description = "Change status to '%s' for selected projects" % status
    return action_func

actions = []
for s in Status.objects.all():
    actions.append(create_action(s))