Может ли django-model-utils StatusModel предоставлять удобочитаемые параметры статуса? - PullRequest
3 голосов
/ 19 мая 2011

Я пытаюсь использовать функцию StatusModel потрясающего пакета django-model-utils Карла Мейера для создания модели с полем состояния.Это очень хороший дизайн, в котором вы создаете подкласс для своей модели из StatusModel и передаете объект Choices в поле модели с именем STATUS, которое автоматически создает поля 'status' и 'status_changed' в представлении базы данных.

Я бы хотел, чтобы у моего поля состояния было другое удобочитаемое значение, нежели его представление в базе данных, а в документации для Choices класса говорится, что ему можно передать два кортежа, в которыхпервое значение - это представление базы данных выбора, а второе - удобочитаемое значение.Но когда я пытаюсь сделать это с моей StatusModel, используя вышеупомянутый объект Choices, я все равно получаю представление базы данных, когда использую поле статуса в шаблоне.

Вот выдержка из моего класса модели:

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 Ответ

5 голосов
/ 19 мая 2011

Вы можете просто использовать обычный метод get_FOO_display() - в этом случае {{ petition.get_status_display }}

...