我想获取当前未选择的选项的选项字段的命名值。这可能吗?
例如: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”变为“待定”?我可以通过在 View 中创建一个表单并访问其值/标签字典来做到这一点。这是最好/唯一的方法吗?
最佳答案
从模型中导入您的选择映射 FILE_STATUS_CHOICES
并使用它通过 P
获取 Pending
非常好:
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
是您的模型实例。
另见:
关于python - Django:访问给定字段的选择元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18706098/