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

如何在Django中获取自定义模型字段的人类可读月份名称

解决Django模型月份字段返回数字而非可读名称的问题

嘿,这个问题我之前做Django项目时也碰到过!其实你已经踩对了一半——Admin后台能看到月份名称,说明Django已经帮我们维护好了数字和名称的映射关系,只需要用对方法就行~

最简单的解决方案:修改模型的__str__方法

Django对带有choices参数的字段,会自动生成一个get_<字段名>_display()方法,专门用来获取该字段对应的可读显示值。你只需要把模型里的__str__方法改成下面这样:

from django.utils.dates import MONTHS

class Month(models.Model):
    month = models.IntegerField(choices=MONTHS.items(), blank=True, null=True)
    
    def __str__(self):
        # 用get_month_display()获取可读的月份名称,为空时显示兜底文本
        return self.get_month_display() or '未选择月份'

这样当你打印Month实例、在控制台查看对象,或者在其他场景调用它的字符串表示时,就会直接返回January、February这类名称了。如果month字段是null,还会显示“未选择月份”作为兜底,避免返回空字符串。

在其他场景中获取月份名称

  • 在视图里:直接调用实例的get_month_display()方法即可:
    month_obj = Month.objects.get(id=1)
    month_name = month_obj.get_month_display()  # 返回"January"
    
  • 在模板里:不需要加括号,直接用模板变量调用:
    {{ month_obj.get_month_display }}
    

自定义月份名称(可选)

如果你想替换默认的英文月份名称(比如用中文),只需要自己定义一个类似MONTHS的字典,替换字段的choices参数就行:

MY_CUSTOM_MONTHS = {
    1: '一月',
    2: '二月',
    3: '三月',
    # ... 依次定义剩下的月份
}

class Month(models.Model):
    month = models.IntegerField(choices=MY_CUSTOM_MONTHS.items(), blank=True, null=True)
    
    def __str__(self):
        return self.get_month_display() or '未选择月份'

这样get_month_display()就会返回你自定义的月份名称啦~

内容的提问来源于stack exchange,提问作者Hannan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:49:16