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.
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
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
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