如何有条件地排除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
啊!固体解决方案,谢谢schwobaseggl:) – JBT
作为创始人打算;) – schwobaseggl