使用mixin进行ModelAdmin时处理重定向

时间:2014-09-23 19:01:20

标签: python django django-admin

我有一些ModelAdmin类,他们的ModelForm基于同一个ModelForm类。

class RepairAdmin(RedirectMixin, admin.ModelAdmin):
   pass

class PurchaseAdmin(RedirectMixin, admin.ModelAdmin):
   pass

我需要为某些redirect_方法定义特定行为,因此我写了RedirectMixin

class RedirectMixin(object):
    def response_add(self, request, obj, post_url_continue=None):
        if request.POST.get('_continue'):
            return super(self.__class__, self).response_add(request, obj)
        return HttpResponseRedirect(reverse('admin:requests_request_changelist'))

问题是我不能将self.__class__super()一起使用 - 我得到“超出最大递归”异常。但我无法指定类本身,我不知道它是PurchaseAdmin还是RepairAdmin。

1 个答案:

答案 0 :(得分:1)

但这就是重点,你不需要知道。超级调用必须始终使用您定义的类.Python使用MRO解析引用。

class RedirectMixin(object)
    def response_add(...):
        ...
        return super(RedirectMixin, self).response_add(...)