2012-01-17 16 views
1

djangoで作業しています。Pythonの単純なfirst_name last_nameが空白の場合はlast_initial

ユーザー名が省略可能なプロファイルモデル用のUnicode出力の作成。

Desired: 
    John D. if last name 
    John if not last name 

Acceptable (though not ideal): 
    John . if not last name 

現在のコード:

def __unicode__(self): 
    return "%s %s." % (self.user.first_name, self.user.last_name[0]) 

これは通常、 "" 許容可能な結果を​​得るために動作しますが、ときLAST_NAME ==失敗しました。

希望の出力を生成するための1行のPythonイディオムはありますか?私はGoogleを検索し、半ダースの検索条件のためにスタックオーバーフローし、ガチョウの卵を出しました。あなたは具体的には、1つのために求めてきましたので、ワンライナーとして書かれ

return self.user.first_name + (' %s.' % self.user.last_name[0] if self.user.last_name else '') 

以上:どの程度

+2

簡単な方法:多くの行で(私は3つ行っています)し、 'return format_name(self.user.first_name、self。)を実行する' format_name(fname、lname) 'ヘルパ関数を定義します。あなたの '__unicode__'に' user.last_name) 'を追加します。これは、(モデル内で)重要な箇所で、起動するために読むことができる行です。 – AdamKG

+0

これはおそらく最良の答えです。私はそれを受け入れることができるように、回答フォームに入れたいですか? – Ted

答えて

2

簡単な方法:

def format_name(fname, lname): 
    if lname: 
     return "{0} {1}.".format(fname, lname) 
    return fname 

それからちょうどreturn format_name(self.user.first_name, self.user.last_name)あなた__unicode__インチこれは、(モデル内で)重要な箇所で、起動するために読むことができる行です。

2

。私は個人的に2行にそれを分割します:

first, last = self.user.first_name, self.user.last_name 
return first + (' %s.' % last[0] if last else '') 
2

はたぶん、あなたはこのようなものを使用することができますアウト

def __unicode__(self): 
    return "%s%s" % (self.user.first_name, 
        " %s." % self.user.last_name[0] 
         if self.user.last_name 
         else "") 
関連する問題