我的Django管理员中有一个引用模型,我设置了一个管理类,其中包含一些字段的列表显示。其中一个字段是'合作伙伴ID'。我有多个不同的设置文件,这些文件从基本设置文件扩展到我所处的任何环境。在这些设置文件中,还有一个SHOW_PARTNER_ID变量。如果SHOW_PARTNER_ID设置为false,我希望能够从列表显示中删除partner_id,反之亦然。我有一个方法,为报价表的每一行返回一个空字符串,该字符串没有合作伙伴ID,但我宁愿完全删除该列。
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 ''
答案 0 :(得分:4)
覆盖模型管理员的get_list_display
方法。原作&#39; (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