choices参数

一:choices参数

1.choices参数作用
1.针对某个可以列举完全的可能性字段,我们应该如何存储
2.只要某个字段的可能性是可以列举完全的,那么一般情况下都会采用choices参数
2.列举:
用户表:	
性别
学历
工作经验
是否结婚
是否生子
客户来源
3.choices效果
1.该gender字段存的还是数字 但是如果存的数字在上面元组列举的范围之内
2.那么可以非常轻松的获取到数字对应的真正的内容

二:choices使用

  • models.py
from django.db import models

class User(models.Model):
    username = models.CharField(max_length=32)
    age = models.IntegerField()
    # 性别 (对应关系)
    gender_choices = (
        (1, '男'),
        (2, '女'),
        (3, '其他'),
    )                          # 参数choices=gender_choices
    gender = models.IntegerField(choices=gender_choices)
    
# 执行迁移命令与同步    
1.创建字段类型
1.字段存什么,根据gender_choices内元组的第一个元素,
2.元素如果是数字就放一个数字类型的字段
3.元素如果是字符串就放一个字符串类型的字段
2.验证choices
  • 1.验证gender字段存的数字不在上述元组列举的范围内容
  • 2.验证 如果在 如何获取对应的中文及信息
3.使用测试脚本
4.将manage.py文件内的前四行代码复制到tests文件中
  • tests.py
import os
import sys

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "choices参数.settings")
5.使用测试脚本开始验证
  • tests.py
import os
import sys

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day78.settings")

    # 测试脚本导入模块
    import django
    django.setup()

    # 导入models
    from app01 import models

    # 创建用户信息
    # 1.验证 1-3都在列举的范围内 4不在列举的范围内
    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)
6.choices参数内错误取值方式
user_obj = models.User.objects.filter(pk=1).first()
print(user_obj.gender)  

image

7.choices正确取值方式
1.只要是choices参数的字段 如果你想要获取对应信息 
固定写法:
	get_字段名_display()
user_obj = models.User.objects.filter(pk=1).first()
print(user_obj.get_gender_display())

image

8.验证 choices取值没有对应关系的
user_obj = models.User.objects.filter(pk=1).first()
print(user_obj.get_gender_display())
如果没有对应关系 那么字段是什么就展示什么 不会报错

image

9.元组第一个元素为字符串情况
保证字段类型跟列举出来的元组第一个数据一直即可
# models.py
class User(models.Model):
    username = models.CharField(max_length=32)
    age = models.IntegerField()
    score_choices = (
        ('A', '优秀'),
        ('B', '良好'),
        ('C', '及格'),
        ('D', '不及格'),
    )
	# 1.保证字段类型跟列举出来的元组第一个数据一直即可
    score = models.CharField(choices=score_choices, null=True)
   

# tests.py
    # 创建用户信息
    # 1.验证 1-3都在列举的范围内 4不在列举的范围内
    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)


	# 2.取值方式 固定写法 get_字段名_display()
    user_obj = models.User.objects.filter(pk=1).first()
	print(user_obj.get_score_display())
posted @ 2022-03-06 22:31  AlexEvans  阅读(102)  评论(0编辑  收藏  举报