Django:更多pythonic __unicode__

Agr*_*jag 9 python django foreign-keys string-formatting

我所有的django模型都有unicode函数,目前这些函数往往是这样编写的:

def __unicode__(self):
    return u'Unit: %s  -- %s * %f' % (self.name, self.base.name, self.mul)
Run Code Online (Sandbox Code Playgroud)

但是,Code Like a Pythonista,在http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html#string-formatting指出这self.__dict__是一本字典,因此上面的内容可以简化为:

def __unicode__(self):
    return u'Unit: %(name)s -- %(base.name)s * %(mul)f' % self.__dict__
Run Code Online (Sandbox Code Playgroud)

这是有效的,除了"base.name",因为python尝试查找self.__dict__['base.name']哪个失败,而self.base.name工作.

即使您需要遵循外键关系,是否有一种优雅的方式来完成这项工作?

eca*_*mur 8

%字符串格式不支持属性访问,但format(从2.6开始):

def __unicode__(self):
    return u'Unit: {name:s} -- {base.name:s} * {mul:f}'.format(**self.__dict__)
Run Code Online (Sandbox Code Playgroud)