2017-02-10 130 views
1

在Django管理,我們可以覆蓋從的ModelAdmin類add_view和change_view功能,這樣的..Django管理add_view/change_view內聯

class ProductAdmin(admin.ModelAdmin) 
    def add_view(self, request, form_url='', extra_context=None): 

     self.readonly_fields = (...) 
     //other code 
     return super(ProductAdmin, self).add_view(request, form_url='', extra_context=None) 
    inlines = [SubProdInLine,] 

這類似於上面的change_view爲好。

但是,Inline模型管理員並不是這種情況。無論如何,我們可以複製像下面的內聯一樣的內容嗎?請注意,下面的代碼不起作用。我只是想能夠做到這樣的事情。

class SubProdInLine(admin.TabularInLine) 
    def add_view(self, request, form_url='', extra_context=None): 

     self.readonly_fields = (...) 
     //other code 
     return super(SubProdInLine, self).add_view(request, form_url='', extra_context=None) 

基本上,我希望能夠改變add_view中的readonly_fields。

回答

0

您不應該在add_view方法中修改readonly_fields - 它可能會影響其他請求。您可以改寫get_readonlyfields。如果該對象是None,則表示您正在添加一個新對象。

class ProductAdmin(admin.ModelAdmin) 
    def get_readonly_fields(self, obj): 
     if obj is None: 
      # We are adding an object 
      return ('field1', 'field2',) 
     else: 
      return self.readonly_fields 

然後,您也可以爲您的內聯類覆蓋get_readonly_fields

class SubProdAdmin(admin.TabularInLine) 
    def get_readonly_fields(self, obj): 
     if obj is None: 
      # We are adding an object 
      return ('field1', 'field2',) 
     else: 
      return self.readonly_fields 
+0

企業風險管理問題是obj是產品的一個實例,而不是SubProd的: - 在產品change_view /意思,我希望能夠改變內聯的readonly_fields。就像我在產品中添加SubProd實例時一樣,我應該可以更改它的readonly_fields .. –

+0

如果'obj'是'SubProdAdmin.get_readonly_fields'中的'Product',那麼您需要深入研究內部。恐怕我不知道一個簡單的方法來做到這一點。 – Alasdair

+0

是的你的權利,我將不得不添加一些JS來完成我的工作..我沒有與JS工作太多,並希望Django管理員有一些功能來幫助我..謝謝雖然.. –