Python 如何有条件地排除django管理列表显示项
我在Django admin中有一个quote模型,我为它设置了一个admin类,其中包含一些字段的列表显示。其中一个字段是“合作伙伴id”。我有多个不同的设置文件,从基本设置文件扩展到我所处的任何环境。在这些设置文件中,有一个SHOW\u PARTNER\u ID变量。如果SHOW_partner_id设置为false,我希望能够从列表显示中删除partner_id,反之亦然。我有一个方法,它为quote表中没有合作伙伴id的每一行返回一个空字符串,但我更愿意完全删除该列Python 如何有条件地排除django管理列表显示项,python,django,model,admin,Python,Django,Model,Admin,我在Django admin中有一个quote模型,我为它设置了一个admin类,其中包含一些字段的列表显示。其中一个字段是“合作伙伴id”。我有多个不同的设置文件,从基本设置文件扩展到我所处的任何环境。在这些设置文件中,有一个SHOW\u PARTNER\u ID变量。如果SHOW_partner_id设置为false,我希望能够从列表显示中删除partner_id,反之亦然。我有一个方法,它为quote表中没有合作伙伴id的每一行返回一个空字符串,但我更愿意完全删除该列 class Quot
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 ''
class QuoteAdmin(admin.ModelAdmin):
列表显示=(‘日期’、‘设备型号’、‘名’、‘姓’、‘客户地址’、‘客户链接’,
“客户历史记录”、“站点名称”、“状态”、“合作伙伴id”)
def合作伙伴id(自身、obj):
从django.conf导入设置
尝试:
如果settings.SHOW\u合作伙伴:
如果是obj合作伙伴:
返回u“”。格式(obj.partner.id,obj.partner.id)
其他:
返回“”
其他:
返回“”
例外情况除外,如e:
logging.error(e)
返回“”
覆盖模型管理员的get\u list\u display
方法。“original”(原始)只返回class属性:
只需实现任何更复杂的逻辑,如根据此处的设置添加/删除字段,例如:
def get_list_display(self, request):
if not settings.SHOW_PARTNER:
return self.list_display[:-1]
return self.list_display
覆盖模型管理员的
get\u list\u display
方法。“original”(原始)只返回class属性:
只需实现任何更复杂的逻辑,如根据此处的设置添加/删除字段,例如:
def get_list_display(self, request):
if not settings.SHOW_PARTNER:
return self.list_display[:-1]
return self.list_display
正如开国元勋们所希望的那样;)正如开国元勋们所希望的那样;)