Django - list_filter不使用方法

时间:2010-11-28 06:26:14

标签: django django-models django-admin

class MyUserAdmin(UserAdmin):
    list_display =  UserAdmin.list_display  + ('get_company',)
    list_filter = UserAdmin.list_filter + ('get_company',)
    inlines = [CompanyInline,]

    def get_company(self, obj):
        assignment = UserCompanyAssignment.objects.get(user__exact=obj.id)
        return assignment.company.name
    get_company.short_description = 'Company'

list_filter不适用于'get_company'。它说

'MyUserAdmin.list_filter[3]' refers to field 'Company' that is missing from model 'User'.

有什么建议吗?

1 个答案:

答案 0 :(得分:4)

list_filter必须指向模型字段,而不是方法。您可以将其指向foreign keys,但为了您的情况,您必须更改用户模型,我认为您没有发布它。

我猜测异常消息是指“公司”字段,因为您将short_description设置为“公司”。有点误导,也许Django的变化是合适的。

要进行自定义过滤,您可以编写自己的FilterSpec,但它还不是官方API。


list_display可能包含方法,如果您想对它们进行排序,可以通过设置admin_order_field属性告诉管理员使用特定字段,如下所示:

def get_company(self, obj):
    # ...
get_company.admin_order_field = 'somefield'