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

例如: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’变为‘Pending’?我可以通过在视图中创建一个表单并访问它的值/标签字典来做到这一点.这是最好的/唯一的方法吗?

推荐答案

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

而且,由于MODEL字段上有一个flatchoices字段,您可以通过_metaget_field_by_name()方法使用它:

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

其中f是您的模型实例.

另见:

Django相关问答推荐

Django中的设计用户类

Django模型ManyToManyField.Add不起作用

Django: 无法将我的 comments 关联到特定产品

如何组织 Django REST Framework url

如何使用邮箱确认码创建django注册

dj_rest_auth 中的 PyTest 警告- RemovedInDjango40Warning: django.conf.urls.url() 已弃用,取而代之的是 django.urls.re_path()

无法创建超级用户,因为 Django 中的一列(外键)不能为空

使用 Python/Django 上传大文件

如何将表单中的用户字段设置为当前登录的用户?

获取 Django 中的缓存键列表

UnicodeDecodeError:asciicodec can't decode byte 0xe0 in position 0: ordinal not in range(128)

Django populate() 不可重入

在 Django 管理页面中注册应用程序中的每个表/类

django 模板中对象的模型名称

如何在不发送信号的情况下保存模型?

Django 什么是反向关系?

如何在 django 中使用更少的 css?

python/django中setattr和对象操作的区别

在 django admin 中控制 TextArea 小部件的大小

如何更改 django 模板中布尔值的打印方式?