如何从Django模型的枚举选项中获取关联键名?
若存在变量
x = 'Administrative Court (KBD Admin)'请问使用什么语法可以从以下Django模型的选项中检索到其关联的名称'admin'?
模型代码如下:class CourtChoices(models.TextChoices): # 枚举类 admin = ("admin", _("Administrative Court (KBD Admin)")) admiralty = ("admiralty", _("Admiralty Court (King’s Bench Division) (KBD Admlty)")) none = ("none", _("none")) courtname = models.CharField(max_length=100, choices=CourtChoices.choices, default="none", unique=True)
解决方法
Django的TextChoices类自带了方便的枚举操作能力,你可以用以下几种方式实现反向查找:
方法1:遍历枚举成员匹配
直接遍历CourtChoices的所有选项,匹配显示文本后取出对应的名称:
target_key = None for item in CourtChoices: if item.label == x: target_key = item.name break # 此时target_key的值就是'admin'
方法2:构建映射字典快速查找
提前构建显示文本到名称的映射字典,后续可以直接通过键值对快速查询:
label_name_map = {item.label: item.name for item in CourtChoices} target_key = label_name_map.get(x) # target_key结果为'admin'
方法3:利用内置反向方法
如果枚举的值和名称一致(比如这里admin的值就是"admin"),可以先通过显示文本拿到对应值,再转换为枚举成员获取名称:
target_value = CourtChoices.get_label(x) target_key = CourtChoices(target_value).name # 同样得到'admin'
注意:如果显示文本使用了翻译函数_(),要确保变量x是经过翻译后的对应文本,或者直接使用原始字符串进行匹配,避免因翻译上下文导致的匹配失败。
内容的提问来源于stack exchange,提问作者Cloud9
相关产品推荐
相关产品推荐

