2010-11-28 13 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' 

Le filtre_list ne fonctionne pas avec 'get_company'. Il ditDjango - list_filter ne fonctionne pas avec les méthodes

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

Des suggestions?

Répondre

4

list_filter doit pointer vers des champs de modèle, pas des méthodes. Vous pouvez le pointer vers foreign keys, mais pour que cela fonctionne dans votre cas, vous devez avoir changé le modèle User, ce que je suppose que vous n'avez pas fait puisque vous ne l'avez pas posté.

Je suppose que l'exception mesage fait référence au champ 'Société' parce que vous avez défini short_description sur 'Société'. Un peu trompeur, peut-être qu'un changement de Django serait approprié.

Pour faire un filtrage personnalisé, vous pouvez écrire le vôtre FilterSpec, mais ce n'est pas encore une API officielle.


list_display peuvent contenir des méthodes, et si vous voulez faire le tri sur eux, vous pouvez dire à l'administrateur d'utiliser un champ spécifique en définissant l'attribut admin_order_field, comme ceci:

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

Y at-il FilterSpec disponible? –

+0

Oui, voir http://code.djangoproject.com/svn/django/trunk/django/contrib/admin/filterspecs.py pour le code, et ces deux extraits: http://djangosnippets.org/snippets/1051/ http://djangosnippets.org/snippets/1963/ Je ne les ai pas utilisés moi-même, donc je ne peux pas me porter garant pour eux. – knutin