2014-09-23 94 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(...)