2009-11-27 6 views
2

J'utilise la gestion des utilisateurs de Django en combinaison avec UserProfiles qui sont liés au modèle User avec ForeignKeys. Maintenant, je voudrais faire des champs à partir des profils des utilisateurs consultables depuis UserAdmin.Hot pour ajouter la possibilité de rechercher dans UserProfile à UserAdmin dans Django | search_fields w/ForeignKey

Ma meilleure estimation était à quelque chose utilisateur comme ceci:

class UserAdmin(auth.admin.UserAdmin): 

    def field_name(self, obj): 
     return obj.get_profile().name 

    list_display = ('field_name',) 

    search_fields = ('field_name',) 

Alors que list_display fonctionne très bien, search_fields me donne un message d'erreur lors de la présentation d'une requête: ne peut pas résoudre mot-clé « field_name » dans le champ. Les choix sont les suivants: [...]

Avez-vous la moindre idée de comment faire? Merci d'avance.

Répondre

2

Vous pouvez utiliser la notation de type queryset avec le trait de soulignement double __ pour indiquer des jointures par exemple.

search_fields = ('company_name','user__username') 

http://docs.djangoproject.com/en/dev/topics/db/queries/#lookups-that-span-relationships

pour plus

+0

Le vrai problème est que le 'auth_user' table ne dispose pas d'un ForeignKey au modèle de profil, mais l'inverse. La seule connexion dans le modèle utilisateur est la méthode '.get_profile()' qui n'est pas accessible en utilisant le double trait de soulignement car il s'agit d'une méthode et non d'un champ. – jnns

+1

Désolé, les relations inversées peuvent fonctionner. quelque chose comme profile__name ou profile__name__contain selon votre schéma. Il est bon de taquiner ces choses dans ipython. Ce sera User.objects.filter (what__you__want = 'foo'). vous pourriez vouloir publier votre modèle de profil si vous avez encore des problèmes – michael

+0

Merci, michael. Les relations inversées ont fait l'affaire. Je ne sais pas pourquoi je ne l'ai pas déjà compris dans votre lien vers les docs django. J'étais peut-être trop fatigué pour penser clairement. – jnns

Questions connexes