如何有条件地排除django管理列表显示项目

问题描述:

我在我的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 '' 

覆盖模型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