【问题标题】:Django- Display columns depending on chosen filter in ModelAdmin (list_display)Django- 根据 ModelAdmin 中选择的过滤器显示列(list_display)
【发布时间】:2020-06-11 16:33:35
【问题描述】:

我正在尝试根据选择的过滤器显示不同的列(在 list_display 中)。

这是我的代码:

# Filter:
class FilterNameFilter(admin.SimpleListFilter):
    title = ('FilterName')
    parameter_name = 'FilterName'

    def lookups(self, request, model_admin):
        return (
            ('xxx', _('xxx 1')),
            ('yyy', _('yyy 2')),
        )

    def queryset(self, request, queryset):
        if self.value() == 'xxx':
            return queryset.filter(c__isnull=False)
        if self.value() == 'yyy':
            return queryset.filter(d__isnull=False)


# Model:
class pricelist_admin(ModelAdmin):
    ...
    list_display = ('EAN_id', 'Vendor', 'Description', 'DynamicColumn', 'a', 'b', 'c', 'd', 'e')
    list_filter = ('Vandor_id__Name', FilterNameFilter)
    search_fields = ('EAN_id__Description', 'EAN_id__EAN')

    #Dynamic column:
    def DynamicColumn(self, obj):
        if  # ... Here is my code for showing different columns,
            # it works fine for other loop's examples, but I don't know 
            # how to integrate it with "FilterNameFilter" to return desired columns:
            return obj.e
        else:
            return obj.EAN.Description

有什么想法吗?非常感谢您的帮助!

【问题讨论】:

    标签: python django django-modeladmin


    【解决方案1】:

    作为一种解决方法,我创建了代理模型:

    class SomeClass(pricelist):
        class Meta:
            proxy = True
    

    使用单独的 ModelAdmin,我可以在其中使用我的列:

    class pricelist2_admin(ModelAdmin):
        ...
        list_display = ('EAN_id', 'Vendor', 'Description', 'd', 'c', 'b', 'a')
        list_filter = ('Vandor_id__Name', FilterNameFilter)
        search_fields = ('EAN_id__Description', 'EAN_id__EAN')
    

    所以我想现在可以这样做......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-03
      • 2020-12-29
      • 1970-01-01
      • 2015-03-12
      • 2018-01-19
      • 1970-01-01
      • 2010-09-14
      • 1970-01-01
      相关资源
      最近更新 更多