按 django admin 中的自定义列表显示字段进行列表过滤

Posted

技术标签:

【中文标题】按 django admin 中的自定义列表显示字段进行列表过滤【英文标题】:list filter by custom list display field in django admin 【发布时间】:2015-12-17 18:24:21 【问题描述】:

我有以下模型管理员。我在列表视图中显示自定义字段。

class CustomerAdmin(admin.ModelAdmin):
    list_display = ('first_name', 'last_name', 'email', 'state')
    search_fields = ('first_name', 'last_name', 'email')
    list_filter = ('state',)
    def state(self, obj):
        address = Address.objects.filter(owner=obj.id)
        if address:
            return address.state
    return None

我在上面尝试过,但它给出了一个错误“list_filter[0]”指的是“状态”,它不是指一个字段。” 所以我想按状态过滤记录。那么我如何在 django 1.5 中做到这一点呢?

【问题讨论】:

【参考方案1】:
class CustomerAdmin(admin.ModelAdmin):
list_display = ('first_name', 'last_name', 'email', 'state')
list_filter = ('state',)
search_fields = ('first_name', 'last_name', 'email')

def state(self, obj):
    address = Address.objects.filter(owner=obj.id)
    if address:
        return address.state
return None

如果你想过滤,你应该包括 list_filter

【讨论】:

这不适用于自定义字段。它给出了一个错误 CustomerAdmin.list_filter[0]' 指的是不引用字段的“状态”。因为 state 不是 Customer 模型中的一个字段,Address 模型和 Customer 模型之间也没有关系。

以上是关于按 django admin 中的自定义列表显示字段进行列表过滤的主要内容,如果未能解决你的问题,请参考以下文章

Django admin 中的自定义相关下拉菜单

Django 1.3 或更低版本的 Django Admin 中的自定义过滤器

Sonata Admin 的 sonata_type_model 字段的自定义选项列表

Django admin 中的自定义验证

Django Admin:仅对一个模型字段使用自定义小部件

自定义admin