Django选择显示值

时间:2015-01-22 00:19:33

标签: python django unicode

Model.py:

class RiskIssue(models.Model):
    RISK_ISSUE_SEVERITY = (
        ('L', 'Low'),
        ('M', 'Medium'),
        ('H', 'High'),
    )
    projectRiskIssueSeverity = models.CharField("Risk/Issue Severity",
                      max_length=1, choices=RISK_ISSUE_SEVERITY, default='L')

View.py代码:

cell = table.rows[2].cells[0]
formatted_status = [astatus.get_projectRiskIssueSeverity_display() for
              astatus in activitylist.values_list('activityStatus', flat=True)]
cell.paragraphs[0].text = ', '.join(formatted_status)

我收到错误代码:'unicode' object has no attribute 'get_projectRiskIssueSeverity_display'

我做错了什么?除了正确的答案,我已经尝试了一切。这里非常小的TypeError问题我假设activitylist是一个unicode对象,在它之前不需要activitylist.objects。

此处的问题是:astatus.get_projectRiskIssueSeverity_display(),根据https://docs.djangoproject.com/en/dev/ref/models/instances/#django.db.models.Model.get_FOO_display

,这无法正常工作

2 个答案:

答案 0 :(得分:2)

请注意,get_FOO_display()是模型上的实例方法。 .values_list()没有返回任何模型实例,因此该值不会有任何get_FOO_display()方法。

答案 1 :(得分:2)

您只能在模型实例上使用get_FOO_display()。使用中间字典从纯状态值中获取显示名称:

severity_d = dict(RiskIssue.RISK_ISSUE_SEVERITY)
formatted_status = [severity_d[astatus] for astatus in
                    activitylist.values_list('activityStatus', flat=True)]