You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Django的LANG_INFO字典转为元组列表用于模型选项?

实现Django LANG_INFO到模型choices的转换

这个需求其实很容易搞定,核心就是遍历LANG_INFO这个嵌套字典,提取每个语言条目里的code和name字段组成元组就行。我给你拆解下实现逻辑,直接上可用代码:

基础实现版本

from django.conf.locale import LANG_INFO

def get_locale_choices():
    # 遍历LANG_INFO的键值对,提取每个语言的code和name组成元组
    return [(lang_details['code'], lang_details['name']) for _, lang_details in LANG_INFO.items()]

这里用了列表推导式简化代码:LANG_INFO.items()会返回一组(语言代码键, 语言详细字典)的配对,我们只需要从每个lang_details字典里取出code(数据库存储值)和name(后台表单显示的友好名称),拼成元组就完美契合CharField的choices格式要求。

模型字段使用示例

你可以直接把这个函数传给模型字段的choices参数,就像你计划的那样:

from django.db import models

class YourModel(models.Model):
    locale = models.CharField(
        max_length=5,
        choices=get_locale_choices(),
        default='en'
    )

可选优化:按语言名称排序

如果希望后台下拉框里的语言按名称字母顺序排列(而非默认的代码顺序),可以给结果加个排序逻辑:

def get_locale_choices():
    # 先提取元组,再按语言名称(元组第二个元素)排序
    locale_tuples = [(lang_details['code'], lang_details['name']) for _, lang_details in LANG_INFO.items()]
    return sorted(locale_tuples, key=lambda item: item[1])

这样生成的选项列表对用户来说会更友好,找语言更方便。

内容的提问来源于stack exchange,提问作者Micheal J. Roberts

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 17:52:46