使用model_obj.get_FOO_display()方法
示例:
class Foo(models.Model):
GENDER_CHOICES = (
('M', 'Male'),
('F', 'Female'),
)
gender = models.CharField(max_length=1, choices=GENDER_CHOICES)
和 shell 响应
In [2]: foo_obj = Foo.objects.first()
In [3]: foo_obj.get_gender_display()
Out[3]: 'Male'
In [4]: foo_obj.__dict__
Out[4]:
{'_state': ,
'id': 1,
'gender': 'M'}
更新
在列表理解语句中使用 if...else 语句。
writer.writerow([unicode(getattr(instance, f)).encode('utf-8') if f != 'FOO' else unicode(getattr(instance, 'get_FOO_display')()).encode('utf-8') for f in field_names])
示例
In [8]: class MySample(object):
...: f_name = 'foo'
...: l_name = 'bar'
...:
...: def full_name(self):
...: return self.f_name + " " + self.l_name
...:
In [9]: class_obj = MySample()
In [10]: getattr(class_obj,'f_name')
Out[10]: 'foo'
In [11]: getattr(class_obj,'l_name')
Out[11]: 'bar'
In [12]: getattr(class_obj,'full_name')()
Out[12]: 'foo bar'