36

我想为当前未选择的选项获取选项字段的命名值。这可能吗?

例如: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)

视图.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”变为“待定”?我可以通过在视图中创建一个表单并访问其值/标签字典来做到这一点。这是最好/唯一的方法吗?

4

2 回答 2

59

从模型中导入您的选择映射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模型字段上有一个字段,您可以借助_metaandget_field_by_name()方法使用它:

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

f你的模型实例在哪里。

另见:

于 2013-09-09T20:08:42.080 回答
0

我建议使用Choice来自django-model-utilshttps ://django-model-utils.readthedocs.io/en/latest/utilities.html#choices 。

如果我需要选择字段,我会在我的每个模型中使用它。看例子,它有很好的选择。

于 2017-08-22T07:14:38.110 回答