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

时间:2013-09-09 20:03:36

标签: python django django-models views

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

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

2 个答案:

答案 0 :(得分:46)

从模型中导入您的选择映射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

其中{{1}}是您的模型实例。

另见:

答案 1 :(得分:0)

我建议您使用Choice中的django-model-utilshttps://django-model-utils.readthedocs.io/en/latest/utilities.html#choices

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