django-model-utils StatusModel可以提供人类可读的状态选项吗?

时间:2011-05-19 14:03:13

标签: python django django-models

我正在尝试使用Carl Meyer的StatusModel feature包的django-model-utils来创建一个具有状态字段的模型。这是一个非常好的设计,您可以在其中将模型从StatusModel子类化,并将Choices对象传递给名为STATUS的模型上的字段,该字段会自动在数据库表示上创建“status”和“status_changed”字段

我希望我的状态字段具有与其数据库表示形式不同的人类可读值,并且documentation for the Choices class表示可以传递一个两元组,其中第一个值是数据库表示形式选择,第二个是人类可读的价值。但是当我尝试使用上面的Choices对象对我的StatusModel执行此操作时,我仍然在模板中使用状态字段时获取数据库表示。

以下是我的模型类的摘录:

from django.utils.translation import ugettext as _
from model_utils import Choices
from model_utils.models import StatusModel

STATUS_CHOICES = Choices(
    ('awaiting_approval', _('Awaiting approval')), 
    ('returned_to_submitter', _('Returned to submitter')), 
    ('approved', _('Approved')), 
    ('denied', _('Denied')),
)

class Petition(StatusModel):
    STATUS = STATUS_CHOICES
    ...

这是我的模板:

<table>
    <tr>
        <th>Status</th>
    </tr>
    {% for petition in petitions %}
    <tr>
        <td>{{ petition.status }}</td> 
        <!-- expecting "Awaiting approval" but it displays "awaiting_approval" -->
    </tr>
    {% endfor %}
</table>

如何让模型类返回人类可读状态?或者StatusModel不支持Choices对象的该功能吗?

1 个答案:

答案 0 :(得分:5)

您可以使用普通get_FOO_display()方法 - 在本例中为{{ petition.get_status_display }}