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

gra*_*pot 3 python django django-models

我正在尝试使用Carl Meyer令人敬畏的django-model-utils包的StatusModel功能来创建具有状态字段的模型。这是一个非常不错的设计,您可以在其中将模型子类化,然后将对象传递给模型中名为STATUS的字段,该字段将在数据库表示形式上自动创建“ status”和“ status_changed”字段。StatusModelChoices

我希望状态字段具有比其数据库表示形式更易于理解的值,并且该类文档Choices说,可以将其传递给两个元组,其中第一个值是所选内容的数据库表示形式,第二是人类可读的价值。但是,当我尝试使用上述Choices对象使用StatusModel进行此操作时,在模板中使用status字段时仍会获得数据库表示形式。

这是我的模型课的摘录:

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
    ...
Run Code Online (Sandbox Code Playgroud)

这是我的模板:

<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>
Run Code Online (Sandbox Code Playgroud)

如何获得模型类以返回人类可读状态?还是不StatusModel支持该Choices对象的功能?

Dan*_*man 5

您可以只使用常规get_FOO_display()方法-在这种情况下{{ petition.get_status_display }}