2009-04-09 6 views
0

Je travaille sur une application Django pour l'hébergement de médias (en particulier audio et images). J'ai des galeries d'images et des photos séparées dans mon modèle, et les ai liées avec un ForeignKey (je ne sais pas si c'est correct, mais j'apprends toujours). Ce dont j'ai besoin, c'est que le __unicode__ de la classe Album renvoie le nom d'utilisateur du propriétaire de l'album.Django Modèle: Nom d'utilisateur de retour de l'utilisateur actuellement connecté

class Album(models.Model): 
    artist = models.ForeignKey(User, unique=True, related_name='artpunk') 

    def __unicode__(self): 
     return self.artist.username 

Je sais la propriété nom d'utilisateur existe, et confirmé par l'insertion d'un dir() et vérifier la sortie de la console. Le problème est lorsque j'entre dans la section image du panneau d'administration, il indique simplement "Commande non reconnue". Les propriétés User ne peuvent-elles pas être accédées par les modèles? Ou est-ce que je fais quelque chose d'autre?

EDIT: J'ai oublié de mentionner, en utilisant Python 2.6 avec Django 1.0.2. Le texte exact de l'erreur est, comme ci-dessus, simplement "Commande non reconnue" en gras, et j'ai déjà exécuté syncdb sans problème. Cependant, je l'ai rediffusé syncdb ce matin juste pour essayer encore et maintenant il semble fonctionner correctement.

Il est reproductible en changeant les éléments suivants:

def __unicode__(self): 
     return self.artist.username 

à quelque chose comme ceci:

def __unicode__(self): 
     return self.artist.username+'\'s Gallery' 
+0

Pouvez-vous poster le texte exact de toute erreur? – user27478

Répondre

1

Il devrait y avoir aucun problème pour accéder à l'utilisateur (même comme clé étrangère) d'un modèle. Je viens de terminer le test moi-même, et il ne semble pas y avoir de différence significative.

def __unicode__(self): 
    return self.user.username 

Sur une note de côté, vous devriez pouvoir juste revenir self.artist, car je crois que User.__unicode__() renvoie le nom d'utilisateur de toute façon.

Quels sont les détails exacts de l'erreur? Quelle version de Django/Python utilisez-vous? Avez-vous modifié votre modèle qui n'est pas encore reflété dans la base de données? Parfois, j'ai remarqué que vous avez juste besoin de redémarrer le serveur de test pour que les choses fonctionnent bien. Particulièrement dans l'admin.

En réponse à votre édition, essayez de caster le nom d'utilisateur comme une chaîne:

str(self.user.username) 
+1

ou encore mieux d'utiliser une chaîne unicode pour que la méthode unicode renvoie effectivement une chaîne Unicode :-) return self.artist.username + u '\' s Gallery ' –

Questions connexes