一: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)

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

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

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())

choices参数的更多相关文章

  1. ORM优化查询、choices参数

    目录 ORM查询优化 only与defer select_related和prefetch_related MTV与MVC模型 choices参数 ORM查询优化 only与defer res = m ...

  2. F与Q查询 事务 choices参数

    F与Q查询 F查询 当我们需要将两个字段对应的数据进行比较时就需要用到F查询. select * from book where sold > stock 1.例如需要将售出部分数据和库存数据进 ...

  3. ORM中choices参数(重要)、MTV于MVC模型、多对多关系三种创建方式

    choices参数(重要) **使用方式

  4. models中,对于(Small)IntegerField类型字段的choices参数在前端的展示

    # models.py class UserInfo(models.Model): gender_choices = ( (1, "男"), (2, "女"), ...

  5. 使用choices参数的实际项目表设计

    # 实际项目表设计 from django.db import models # Create your models here. # rbac权限相关表格 class User(models.Mod ...

  6. Python解析命令行读取参数 -- argparse模块

    在多个文件或者不同语言协同的项目中,python脚本经常需要从命令行直接读取参数.万能的python就自带了argprase包使得这一工作变得简单而规范.PS:optparse包是类似的功能,只不过写 ...

  7. argparse - 命令行选项与参数解析(转)

    argparse - 命令行选项与参数解析(译)Mar 30, 2013 原文:argparse – Command line option and argument parsing 译者:young ...

  8. python命令行参数解析模块argparse和docopt

    http://blog.csdn.net/pipisorry/article/details/53046471 还有其他两个模块实现这一功能,getopt(等同于C语言中的getopt())和弃用的o ...

  9. python 命令行参数——argparse模块的使用

    以下内容主要来自:http://wiki.jikexueyuan.com/project/explore-python/Standard-Modules/argparse.html argparse ...

  10. python之定义参数模块argparse(一)基本使用

    在shell脚本中,若脚本带参数,则在脚本中使用$1.$2...等引用, 在python中,也可以定义类似的引用参数,可以为必选项也可以可选项. 基本用法如下三种: 1.必选项(位置参数) impor ...

随机推荐

  1. 几篇关于MySQL数据同步到Elasticsearch的文章---第一篇:Debezium实现Mysql到Elasticsearch高效实时同步

    文章转载自: https://mp.weixin.qq.com/s?__biz=MzI2NDY1MTA3OQ==&mid=2247484358&idx=1&sn=3a78347 ...

  2. Alertmanager高可用

    为了提升Promthues的服务可用性,通常用户会部署两个或者两个以上的Promthus Server,它们具有完全相同的配置包括Job配置,以及告警配置等.当某一个Prometheus Server ...

  3. Elasticsearch中字段的类型

    在Elasticsearch中,每一个字段都有一个类型(type).以下为Elasticsearch中可以使用的类型:

  4. 【面试题】Vue2动态添加路由 router.addRoute()

    Vue2动态添加路由 点击打开视频讲解更加详细 场景: 一般结合VueX和localstorage一起使用 router.addRoutes vue-router4后 已废弃:使用 router.ad ...

  5. spring cron表达式源码分析

    spring cron表达式源码分析 在springboot中,我们一般是通过如下的做法添加一个定时任务 上面的new CronTrigger("0 * * * * *")中的参数 ...

  6. instanceof的使用和向下转型

    x instanceof A:检验x是否为类A的对象,返回值为boolean型 使用情境:为了避免在向下转型时出现ClassCastException的异常,我们在向下转型之前,先进行instance ...

  7. JSP中使用response对象实现定时跳转网页

    5秒后跳转到登录页面 <% response.setHeader("refresh","5;URL="login.jsp"); %>

  8. golang中的变量阴影

    索引:https://waterflow.link/articles/1666019023270 在 Go 中,在块中声明的变量名可以在内部块中重新声明. 这种称为变量阴影的原理很容易出现常见错误. ...

  9. AT24C02

    AT24C02是一款拥有256bytes(32Page)的EEPROM. 一 :特点(部分) 1:双线接口: 2:双向数据传输协议: 3:400KHz波特率: 4:硬件写保护: 5:最大5ms写入同步 ...

  10. C#-多线程的使用Tread

    首先是概念,什么是线程? 线程是操作系统分配CPU时间的基本单元,在一个进程中可以有多个线程同时执行代码. 谈一谈什么是进程? 简单的说,一个正在运行的应用程序可以视为一个进程,进程间相互独立,资源不 ...