User を外部キーとするモデルがいくつかあります。User リストにはユーザー名が表示されていますが、これをカスタマイズしたいと思います。User モデルをカスタム モデルで拡張し、独自の__str__
関数を記述する必要がありますか? もっと簡単な方法はありますか? フィールドセットに呼び出し可能オブジェクトを使用することはできないと思いますが、そうでしょうか?
ベストアンサー1
__unicode__()
メソッドは正しくないと思います__str__()
。メソッドを使用する必要があります。
の場合Python 2.x
、__str__()
メソッドは str(bytes) を返し、__unicode__()
メソッドは unicode (text) を返します。
print ステートメントと str 組み込み呼び出しは、
__str__()
オブジェクトの人間が判読できる表現を決定します。unicode 組み込み呼び出しは、__unicode__()
存在する場合はそれを呼び出し、存在しない場合はフォールバックして__str__()
システム エンコーディングで結果をデコードします。逆に、Model 基本クラスは、UTF-8 にエンコーディングして自動的__str__()
に派生します。__unicode__()
ここから全文を読む
しかし、Python 3.x
そこにはただ方法__str__()
がないのです__unicode__()
。
DjangoはPython 2と3で動作するメソッドを定義する簡単な方法を提供します。
__str__()
テキストを返すメソッドを定義し、__unicode__()
__str__()
Python_2_Unicode 互換() デコレータ。Python 3 では、デコレータは何も行いません。Python 2 では、適切なメソッド
__unicode__()
とメソッドを定義します (プロセス内の__str__()
元のメソッドを置き換えます)。__str__()
以下は Django ドキュメントからの例です。
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class MyClass(object):
def __str__(self):
return "Instance of my class"
解決 :クラスに対して上記で行ったのと同じ方法で を装飾しmodels.py
、 User モデルに追加されるメソッドを追加します。
from django.contrib.auth.models import User
def get_name(self):
return '{} {}'.format(self.first_name, self.last_name)
User.add_to_class("__str__", get_name)