当last_name可以为空时,Python simple first_name last_initial

时间:2012-01-17 21:08:43

标签: python django

在django工作。

为配置文件模型创建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 ==“”时失败。

是否有单行python成语来生成我想要的输出?我已经搜索了谷歌和堆栈溢出的六个搜索条件,并已经出现了鹅蛋。

3 个答案:

答案 0 :(得分:2)

怎么样:

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

以上是作为一个单行写的,因为你特意要求一个。我个人会把它分成两行:

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

答案 1 :(得分:2)

也许你可以使用这样的东西:

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

答案 2 :(得分: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__。这是重要的一行(在您的模型中),并且可读取。