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

标签 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”变为“待定”?我可以通过在 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 字段,您可以在 _metaget_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/

相关文章:

python - 更改变量值时的 PyQt 事件

python - 编写 if-else 循环以根据条件填充数据框列时出现 ValueError

python - 有时在 python 和 mathematica 中计算的特征向量有相反的符号有人知道为什么吗?

Django - 如何指定验证失败的字段?

python - 每次将字符串写入新行的文件

python - 尝试登录已登录的应用程序 Django 时 CSRF 验证失败

python - 单个 Django 模型,多个表?

python - 在 Django 中,作为字段参数的 verbose_name 和 Meta 内部类中的 verbose_name 有什么区别?

python - 如何在 Django 的单个函数中传递两个不同的参数?

Django休息框架: field name 'likes' is not valid for model 'userPost' improperlyConfigured