2009-04-09 12 views
0

私はDjangoアプリを使ってメディア(特に音声と画像)をホスティングしています。私は画像ギャラリーと写真を私のモデルで分けて、ForeignKeyとリンクさせました(それが正しいかどうかは分かりませんが、まだ学習しています)。私が必要とするのは、アルバムクラスの__unicode__がアルバムの所有者のユーザー名を返すことです。Djangoモデル:現在ログインしているユーザからのユーザ名を返す

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

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

私は、ユーザー名のプロパティが存在することがわかっている、とdir()を挿入し、コンソール出力をチェックして、それを確認しました。問題は、管理パネルの画像セクションに入るときです。「認識できないコマンド」と表示されます。モデルによってUserのプロパティにアクセスできませんか?それとも別のことをやっているのですか?

EDIT:Django 1.0.2でPython 2.6を使用しています。エラーの正確なテキストは、上記のように、単に「認識できないコマンド」を太字で表しており、私はすでにsyncdbを問題なく実行しています。しかし、今朝もう一度試してみると、syncdb(出力はない)が返ってきて、うまくいきました。

それは次のように変更することにより、再現性のあるです:

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

をこのような何かに:

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

あなたが全体のエラーの正確なテキストを投稿することができますか? – user27478

答えて

1

モデルからユーザを(たとえ外部キーなど)へのアクセスは問題があってはなりません。私はちょうどそれを自分でテストし終わったし、大きな違いはないようだ。サイドノートでは

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

、あなたはまた、ちょうど私がUser.__unicode__()はとにかくユーザー名を返すことを信じているので、self.artistを返すことができるはずです。

エラーの詳細はなんですか?どのバージョンのDjango/Pythonを使用していますか?まだデータベースに反映されていないモデルを変更しましたか?時には、うまくいくためにテストサーバーを再起動する必要があることに気づいたことがあります。特に管理者の場合。あなたの編集に対応して

、文字列としてユーザ名をキャストしてみてください。

str(self.user.username) 
+1

またはユニコードメソッドが実際にユニコードストリングを返すようにユニコード文字列を使用することをお勧めします。 return self.artist.username + u '\' Gallery ' –

関連する問題