2014-09-23 87 views
0

我有一些ModelAdmin类,它们的ModelForm都基于同一个ModelForm类。使用ModelAdmin的mixin处理重定向

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')) 

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

回答

1

但这就是关键,你不需要知道。超级调用必须始终使用您定义的类。Python使用MRO解析参考。

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