2017-03-06 71 views
0

我在我的Django管理員中有一個報價模型,我設置了一個管理類,並使用其中一些字段的列表顯示。其中一個領域是「合作伙伴ID」。我有多個不同的設置文件,這些文件可以從基本設置文件擴展到任何我所處的環境。在這些設置文件中,這些文件是SHOW_PARTNER_ID變量。如果SHOW_PARTNER_ID設置爲false,我希望能夠從列表顯示中刪除partner_id,反之亦然。我有一個方法可以爲沒有合作伙伴ID的引用表的每一行返回一個空字符串,但我寧願完全刪除該列。如何有條件地排除django管理列表顯示項目

class QuoteAdmin(admin.ModelAdmin): 
    list_display = ('date', 'device_model', 'first_name', 'last_name', 'customer_address', 'customer_link', 
        'customer_history', 'site_name', 'status', 'partner_id') 

    def partner_id(self, obj): 
      from django.conf import settings 
      try: 
       if settings.SHOW_PARTNER: 
        if obj.partner: 
         return u'<a href="/admin/quote/partner/{}/">{}</a>'.format(obj.partner.id, obj.partner.id) 
        else: 
         return '' 
       else: 
        return '' 
      except Exception as e: 
       logging.error(e) 
       return '' 

回答

3

覆蓋模型admin的get_list_display方法。該 '原始'(source)只返回class屬性:

def get_list_display(self, request): 
    """ 
    Return a sequence containing the fields to be displayed on the 
    changelist. 
    """ 
    return self.list_display 

就實現諸如添加/移除根據設置在此一領域,例如,任何更復雜的邏輯:

def get_list_display(self, request): 
    if not settings.SHOW_PARTNER: 
     return self.list_display[:-1] 
    return self.list_display 
+0

啊!固體解決方案,謝謝schwobaseggl:) – JBT

+0

作爲創始人打算;) – schwobaseggl