Django - list_filter не работает с методами - PullRequest
0 голосов
/ 28 ноября 2010
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 Ответ

4 голосов
/ 28 ноября 2010

list_filter должен указывать на поля модели, а не на методы. Вы можете указать его на внешние ключи , но для того, чтобы это работало в вашем случае, вы, должно быть, изменили модель пользователя, которую, как я полагаю, вы не сделали, поскольку вы ее не опубликовали.

Я предполагаю, что сообщение об исключении относится к полю «Компания», потому что вы установили для short_description «Компания». Несколько вводит в заблуждение, возможно, изменение в Django будет уместным.

Чтобы выполнить пользовательскую фильтрацию, вы можете написать свой собственный FilterSpec, но он пока не является официальным API.


list_display может содержать методы, и если вы хотите выполнить сортировку по ним, вы можете указать администратору использовать определенное поле, установив атрибут admin_order_field, например:

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