2010-11-28 23 views
0
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'。它說Django - list_filter不能使用方法

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

有什麼建議嗎?

回答

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' 
+0

有什麼FilterSpec可用? – 2010-11-28 16:50:08