Django:访问给定字段的选择元组

Fur*_*tor 26 python django views django-models

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

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

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

如何将旧显示值从"P"变为"待定"?我可以通过在视图中创建表单并访问其值/标签字典来实现.这是最好/唯一的方法吗?

ale*_*cxe 47

这是非常确定导入你的选择映射FILE_STATUS_CHOICES从模型,并用它来获得PendingP:

from my_app.models import FILE_STATUS_CHOICES

print dict(FILE_STATUS_CHOICES).get('P')
Run Code Online (Sandbox Code Playgroud)

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

而且,因为有一个flatchoices模型上的场域,您可以的帮助下用它_metaget_field_by_name()方法:

choices = f._meta.get_field_by_name('name')[0].flatchoices
print dict(choices).get('P')
Run Code Online (Sandbox Code Playgroud)

f你的模型实例在哪里

另见: