Django | ORM choices参数详解

choices参数(数据库字段设计)

# 在数据库字段设计阶段,只要某个字段的可能性是可以列举完全的,那么一般情况下都会采用choices参数

# 什么是可以列举完全的呢?
答 :就是一个数据的结果就是定数,
	比如:数据的结果为性别(男/女)
    	  数据的结果为学历(小学,高中,大学,研究生,博士,等等)
          数据的结果为是否结婚(已婚/未婚).....
            
# 像这样的数据,都是可以列举完全的,那么这种数据字段,一般采用choices参数
Django模型中的字段有个choices属性,这个属性可以提供被选数据,choices的参数是一个元组,它里面也是元组构成,第一个参数是choices的可选参数,第二个是对这个参数的说明。如果一个字段设置了这个属性,在模版中如果我要显示这个字段,那么django模版系统就会将它默认解析为一个下拉菜单,这样对于一个静态的下拉菜单式很方便的.下面我们来看对这个参数的具体使用

示例演示:

class User(models.Model):
    username = models.CharField(max_length=32)
    age = models.IntegerField()
    gender_choices = (
        (1,'男'),     # 使用int类型
        (2,'女'),
        (3,'其他')
    )   
# 先列举所有的对应关系,元组的形式,第一个参数相当于变量名,第二个参数相当于变量值,可通过变量名找到对应的变量值。
    gender = models.IntegerField(choices=gender_choices)  
# 元组内第一个元组的第一个元素是什么类型这里就要定义什么类型,括号内填写choices参数,参数的值为定义好的对应关系
    """
    该gender字段存的还是数字 但是如果存的数字在上面元祖列举的范围之内
    那么可以非常轻松的获取到数字对应的真正的内容

    """

    score_choices = (
        ('A','优秀'),   # 使用字符类型
        ('B','良好'),
        ('C','及格'),
        ('D','差')
    )
    score = models.CharField(max_length=32,choices=score_choices)

研究:

1.gender字段存的数字不在上述元祖列举的范围内容
2.如果在 如何获取对应的中文信息
    # 存
    models.User.objects.create(username='jack',age=19,gender=1,score='A')
    models.User.objects.create(username='tom',age=20,gender=2,score='B')
    models.User.objects.create(username='kevin',age=31,gender=3,score='C')
    # 验证没有创建对应关系的值是否可以存储进出
    models.User.objects.create(username='gary',age=25,gender=4,score='D')
    models.User.objects.create(username='gary',age=25,gender=5,score='E')

    # 取:
    user_obj = models.User.objects.filter(pk=1).first()
    print(user_obj.gender)
    print(user_obj.get_gender_display())   # 
    # 只要是choices参数的字段 如果你想要获取对应信息 固定写法 get_字段名_display()
    res = models.User.objects.filter(pk=4).first()
    print(res.gender)
    print(res.get_gender_display())
    # 如果没有对应关系 那么字段是什么还是展示什么
    res1 = models.User.objects.filter(pk=5).first()
    print(res1.score)
    print(res1.get_score_display())
    # 如果没有对应关系 那么字段是什么还是展示什么

posted @ 2022-03-04 18:26  JasonBorn  阅读(327)  评论(0编辑  收藏  举报