28 ORM之choices参数

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

用户表    
    性别
    学历
    工作经验
    是否结婚
    是否生子
    客户来源
    ...
针对某个可以列举完全的可能性字段,我们应该如何存储

只要某个字段的可能性是可以列举完全的,那么一般情况下都会采用choices参数
"""
class User(models.Model):
    username = models.CharField(max_length=32)
    age = models.IntegerField()
    # 性别
    gender_choices = (
        (1,'男'),
        (2,'女'),
        (3,'其他'),
    )
    gender = models.IntegerField(choices=gender_choices)
    
    score_choices = (
        ('A','优秀'),
        ('B','良好'),
        ('C','及格'),
        ('D','不合格'),
    )
    # 保证字段类型跟列举出来的元祖第一个数据类型一致即可
    score = models.CharField(choices=score_choices,null=True)
    """
    该gender字段存的还是数字 但是如果存的数字在上面元祖列举的范围之内
    那么可以非常轻松的获取到数字对应的真正的内容
    
    1.gender字段存的数字不在上述元祖列举的范围内容
    2.如果在 如何获取对应的中文信息
    """

存的时候 没有列举出来的数字也能存(范围还是按照字段类型决定)

from app01 import models
models.User.objects.create(username='jason',age=18,gender=1)
models.User.objects.create(username='egon',age=85,gender=2)
models.User.objects.create(username='tank',age=40,gender=3)
models.User.objects.create(username='tony',age=45,gender=4)

取值:

只要是choices参数的字段 如果你想要获取对应信息 固定写法 get_字段名_display()

user_obj = models.User.objects.filter(pk=1).first()
print(user_obj.gender)     #1

print(user_obj.get_gender_display())      #“男性”

如果没有对应关系 那么字段是什么还是展示什么

user_obj = models.User.objects.filter(pk=4).first()
print(user_obj.get_gender_display())  # 4

 

posted @ 2021-12-01 14:38  甜甜de微笑  阅读(55)  评论(0编辑  收藏  举报