为__str __()

时间:2018-04-24 16:28:41

标签: python django

在我的模型中,我有两个标题字段,一个用于语言。我希望用其他语言将用户语言中的标题命名为其他语言。

我的model.py

class Post(models.Model):
    title_it = Model.CharField(_('title'), max_length=64, blank=True)
    title_en = Model.CharField(_('title'), max_length=64, blank=True)

    def __str__(self):
        name_traslated={'title_it': self.title_it, 'title_en': self.title_en}
        name_verbose=_('title_it')
        name=name_traslated[name_verbose]
        if name=='':
            name=name_traslated['title_it']
            if name=='':
                name=name_traslated['title_en']
                if name=='':
                    name=ugettext('No Title')

有一些更快的方法吗?例如:

    def __str__(self):
        name_traslated={'title_it': self.title_it, 'title_en': self.title_en}
        name_verbose=_('title_it')
        name=self.title_it
        if name_traslated[name_verbose]: #!=''
            name=name_traslated[name_verbose]
        elif name==''
            name=ugettext('No Title')
        return name

2 个答案:

答案 0 :(得分:0)

您可以使用三元操作的python版本来缩短子句。

class Post:
    title_it = 'ciao mondo'
    title_en = 'hello world'

    def __str__(self):
        name_translated = {'title_it': self.title_it, 'title_en': self.title_en}
        name_verbose = 'title_it'
        out = name_translated[name_verbose] if name_translated[name_verbose] else name_translated['title_en']
        return out if out else 'No Title'

答案 1 :(得分:0)

根据您的使用频率和所需的更多语言扩展程序,您可能希望维护首选项列表。在上面的三方案例中,我将其概括为:

pref_list = [
    name, 
    name_translated[user_language],
    name_translated[default_language]
]

现在,您只需拔出第一个包含文本的文本。您可以通过检查字符串内容或长度来完成此操作。如果您愿意,整个操作可以包含在一个表达式中。