2010-06-18 8 views
1

J'ai une liste de tâches, avec la possibilité d'affecter des utilisateurs. J'ai donc foreignkey au modèle de l'utilisateur dans la base de données. Cependant, l'affichage par défaut est nom d'utilisateur dans le menu déroulant, je voudrais afficher le nom complet (premier en dernier) au lieu du nom d'utilisateur. Si la clé étrangère pointe vers l'une de mes propres classes, je peux simplement changer la fonction str dans le modèle, mais l'utilisateur est un modèle d'authentification django, donc je ne peux pas facilement le changer directement non?comment modifier le texte d'affichage dans django admin foreignkey dropdown

Quelqu'un at-il une idée de comment accomplir cela?

Merci beaucoup!

Répondre

3

Vous pouvez créer une nouvelle ModelForm pour votre modèle de travail, qui permet d'afficher la liste des utilisateurs comme bon vous semble (code ici suppose un modèle nommé Tâche avec un « utilisateur » attribut):

USERS = [(user, user.get_full_name()) for user in User.objects.all()] 

class TaskAdminForm(forms.ModelForm): 
    class Meta: 
     model = Task 
    user = forms.ChoiceField(choices=USERS) 

Ensuite, dites à votre classe ModelAdmin d'utiliser la nouvelle forme:

class TaskAdmin(admin.ModelAdmin): 
    form = TaskAdminForm 
0

Il y a un autre choix:

USERS = [(user.id, user.get_full_name()) for user in User.objects.all()] 
USERS.insert(0, ('', '----')) 

class TaskAdminForm(forms.ModelForm): 
    def __init__(self, *args, **kwargs): 
    super(TaskAdminForm, self).__init__(*args, **kwargs) 
    self.fields['user'].choices=USERS 
Questions connexes