2017-02-10 279 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管理员有一些功能来帮助我..谢谢虽然.. –