django学习——通过get_FOO_display 查找模型中的choice值

在django的models.py 中,我们定义了一些choices的元组,类似一些字典值,一般都是下拉框或者单多选框,例如 0对应男 1对应女等。

class Area(models.Model):
Area_Level = (
(0, u'全国'),
(1, u'省、直辖市'),
(2, u'市、直辖市区'),
(3, u'区、县等'),
)

areaname = models.CharField(max_length=30,unique=True, verbose_name='区域名称')
code = models.CharField(max_length=20,blank=True, default="", verbose_name='区域代码')
parentid  = models.IntegerField(verbose_name='父级id', null=True)
level = models.IntegerField(choices=Area_Level,verbose_name='层级', null=True)

如果我们想要在HTML中显示choice中的字段值,采用{{ obj.level }} 得到的只是数字0,1,2,3 ,如果我们想要的到’全国’、’省、直辖市’、等字段,需要采用get_FOO_display方法:

{{ obj.get_level_display}}

choice参数
choices = (
(1,'male'),
(2,'female'),
(3,'others')
)
gender = models.IntegerField(choices=choices)
"""
1.如果我存的是上面元组中数字会怎么样
2.如果我存的数字不在元组范围内又会怎样
1.数字没有对应关系 是可以存的
"""

from app01 import models
user_obj = models.Userinfo.objects.filter(pk=4).first()
print(user_obj.username)
print(user_obj.gender)
# 针对choices字段 如果你想要获取数字所对应的中文 你不能直接点字段
# 固定句式   数据对象.get_字段名_display()  当没有对应关系的时候 该句式获取到的还是数字
print(user_obj.get_gender_display())
record_choices = (('checked', "已签到"),
              ('vacate', "请假"),
              ('late', "迟到"),
              ('noshow', "缺勤"),
              ('leave_early', "早退"),
              )
record = models.CharField("上课纪录", choices=record_choices, default="checked", 
    
score_choices = ((100, 'A+'),
             (90, 'A'),
             (85, 'B+'),
             (80, 'B'),
             (70, 'B-'),
             (60, 'C+'),
             (50, 'C'),
             (40, 'C-'),
             (0, ' D'),
             (-1, 'N/A'),
             (-100, 'COPY'),
             (-1000, 'FAIL'),
             )
score = models.IntegerField("本节成绩", choices=score_choices, default=-1)

数据对象.get_字段名_display() 获取值

posted @ 2019-11-20 17:20  Huise.J  阅读(310)  评论(0编辑  收藏  举报