0

「/home/david/django/django/contrib/auth/models.py」の User クラスを次のように変更して、Django アプリケーションのユーザーの文字列表現をオーバーライドしました。

class User(models.Model):
    ...
    def __unicode__(self):
        return self.get_profile().full_name()

ユーザー プロファイル モデルで呼び出される関数を作成full_name()して、表示したい方法で氏名を表示しました。

しかし、Apache を再起動した後、モデル フォームの選択メニューのユーザーがまだユーザー名で表示されていることがわかりました。なんで?

ここに画像の説明を入力

4

1 に答える 1

2

インストールにモンキー パッチを適用しようとしないでください。それは本当に悪い考えです。

モデル選択フォーム フィールドがそのモデル インスタンスを表示する方法をオーバーライドする方法をここで読むことができます。

あなたの場合、次のようになります。

class UserChoiceField(ModelChoiceField):
    def label_from_instance(self, obj):
        return obj.get_profile().full_name()

次に、フォームでこのフィールドを使用します。モデル フォームでは、使用されるデフォルト フィールドを上書きする必要があります。

于 2012-06-02T20:14:32.123 に答える