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

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

当数据可以被列举完,能够供用户选择的时候,能够考虑用choices参数,好比性别,成绩,学历,婚否等等

#models.py

from django.db import models


# Create your models here.

class User(models.Model):
    username = models.CharField(max_length=32)
    age = models.IntegerField()
    # 性别
    gender_choices = (
        (1, '男'),
        (2, '女'),
        (3, '其他'),
    )
    gender = models.IntegerField(choices=gender_choices)
    """
    该gender字段存的还是数字,但是如果存的数字在上面元组列举的范围之内,
    那么就可以获取到数字对应的真正内容
    
    1 gender如果字段存的数字不在上述元组列举的范围内容
        
    2 如果在,获取对应的中文信息
    """
    score_choices = (
        ('A', '优秀'),
        ('B', '良好'),
        ('C', '及格'),
        ('D', '不合格'),
    )
    # 保证字段类型跟列举出来的元组的第一个数据类型一致即可
    score = models.CharField(max_length=32, choices=score_choices, null=True)
#tests.py

from django.test import TestCase

# Create your tests here.
import os
import sys


def main():
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'day08.settings')
    import django
    django.setup()
    from app01 import models
    #存
    # models.User.objects.create(score='A', username='zhao', age=19, gender=1)
    # models.User.objects.create(score='B', username='xiaoyu', age=18, gender=2)
    # models.User.objects.create(score='C', username='张三', age=22, gender=3)
    """存的时候没有列举出来的数字也能存"""
    # models.User.objects.create(score='D', username='tony', age=50, gender=4)

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



if __name__ == '__main__':
    main()
posted @ 2022-12-12 15:52  ExpiredSaury  阅读(34)  评论(0编辑  收藏  举报