Подтвердить что ты не робот

Django: доступ к выбранным полям выбора кортежа

Я хотел бы получить именованные значения поля выбора для выбора, который в настоящее время не выбран. Возможно ли это?

Например: models.py

FILE_STATUS_CHOICES = (
    ('P', 'Pending'),
    ('A', 'Approved'),
    ('R', 'Rejected'),
)

class File(models.Model):
    status = models.CharField(max_length=1, default='P', choices=FILE_STATUS_CHOICES)

views.py

f = File()
f.status = 'P'
f.save()

old_value = f.status

print f.get_status_display()
> Pending

f.status = 'A'
f.save()

new_value = f.status

print f.get_status_display()
> Approved

Как я могу получить старое значение отображения из "P" в "Ожидание?"? Я могу сделать это, создав форму в представлении и получив доступ к ее словарю значений/меток. Это лучший/единственный подход?

4b9b3361

Ответ 1

Это довольно хорошо, чтобы импортировать ваше выборное отображение FILE_STATUS_CHOICES из моделей и использовать его для получения Pending на P:

from my_app.models import FILE_STATUS_CHOICES

print dict(FILE_STATUS_CHOICES).get('P')

get_FIELD_display() метод на вашей модели делает практически то же самое:

def _get_FIELD_display(self, field):
    value = getattr(self, field.attname)
    return force_text(dict(field.flatchoices).get(value, value), strings_only=True) 

И, поскольку в поле модели есть поле flatchoices, вы можете использовать его с помощью метода _meta и get_field_by_name():

choices = f._meta.get_field_by_name('name')[0].flatchoices
print dict(choices).get('P')

где f - ваш экземпляр модели.

Также смотрите: