【问题标题】:Django Choices Display ValuesDjango 选择显示值
【发布时间】:2024-05-23 23:30:01
【问题描述】:

模型.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')

查看.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,这没有按预期工作

【问题讨论】:

    标签: python django unicode


    【解决方案1】:

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

    【讨论】:

      【解决方案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)]
      

      【讨论】: