【问题标题】:How to conditionally exclude django admin list display items如何有条件地排除 django 管理列表显示项目
【发布时间】:2017-07-26 13:37:35
【问题描述】:

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

【问题讨论】:

    标签: python django model admin


    【解决方案1】:

    覆盖模型管理员的get_list_display 方法。 'original' (source) 只返回类属性:

    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
    

    【讨论】:

    • 正如开国元勋们所期望的 ;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 2010-11-04
    • 2020-12-07
    • 1970-01-01
    • 2017-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多