8

多くのモデルがリンクされてUserおり、可能な場合は常にテンプレートにフルネームが表示されるようにしたいと考えています。デフォルトを変更する方法はありますUser __unicode__()か? またはそれを行う別の方法はありますか?

を定義できるプロファイル モデルを登録していますが__unicode__()、すべてのモデルをそれにリンクする必要がありますか? 私には良い考えではないようです。


このオブジェクトのフォームを表示する必要があると想像してください

class UserBagde
    user = model.ForeignKey(User)
    badge = models.ForeignKey(Bagde)

__unicodes__各オブジェクトのボックスを選択する必要がありますね。
ユーザーの名前にフルネームを含めるにはどうすればよいですか?

4

4 に答える 4

21

これを試して:

User.full_name = property(lambda u: u"%s %s" % (u.first_name, u.last_name))

編集

どうやらあなたが欲しいものはすでに存在しているようです..

https://docs.djangoproject.com/en/dev/ref/contrib/auth/#django.contrib.auth.models.User.get_full_name

また

Unicode 関数を置き換えることが不可欠な場合:

def user_new_unicode(self):
    return self.get_full_name()

# Replace the __unicode__ method in the User class with out new implementation
User.__unicode__ = user_new_unicode 

# or maybe even
User.__unicode__ = User.get_full_name()

名前フィールドが空の場合のフォールバック

def user_new_unicode(self):
    return self.username if self.get_full_name() == "" else self.get_full_name()

# Replace the __unicode__ method in the User class with out new implementation
User.__unicode__ = user_new_unicode 
于 2012-08-10T13:14:44.760 に答える
3

Django が提案するように設定されたプロファイル モデルがある場合は、そのモデルで完全な名前を定義できます。

from django.contrib.auth.models import User

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    ...

@property
def full_name(self):
    return "%s %s" % (self.user.first_name, self.user.last_name)

次に、オブジェクトにアクセスできる場所ならどこでもuser簡単に実行できますuser.get_profile.full_name

または、テンプレートでフルネームのみが必要な場合は、単純なタグを書くことができます:

@register.simple_tag
def fullname(user):
    return "%s %s" % (user.first_name, user.last_name)
于 2012-08-10T13:10:55.560 に答える
1

そのようにメソッドにスラムget_full_nameするだけです__unicode__

User.__unicode__ = User.get_full_name

関数の結果ではなく、呼び出し可能オブジェクトでオーバーライドしてください。User.get_full_name()開き括弧と閉じ括弧では失敗します。

含まれているファイルに配置すると、うまくいくはずです。

于 2016-03-16T16:59:07.553 に答える
0

Django 1.5 でこれを行う簡単な方法があることがわかりました。これを確認してください: カスタムユーザーモデル

そして私も気づきます、

User.__unicode__ = User.get_full_name()

Francis Yaconiello による言及は、私の側では機能しません (Django 1.3)。次のようなエラーが発生します。

TypeError: unbound method get_full_name() must be called with User instance as first argument (got nothing instead)
于 2012-11-19T04:31:51.900 に答える